使用Canvas实现Splash

简介:  游戏中的开头一般都需要使用闪屏(Splash Screen)来显示开发商的相关信息或者游戏的背景等,所以一般情况下游戏中的闪屏都多于一个,有两个甚至更多,例如百宝箱中的游戏中移动已经规定第一个闪屏必须是移动梦网的Logo,而第二个要出现百宝箱的logo。
 游戏中的开头一般都需要使用闪屏(Splash Screen)来显示开发商的相关信息或者游戏的背景等,所以一般情况下游戏中的闪屏都多于一个,有两个甚至更多,例如百宝箱中的游戏中移动已经规定第一个闪屏必须是移动梦网的Logo,而第二个要出现百宝箱的logo。实现闪屏的方式有很多种,最合理的方式应该还是使用Canvas,因为闪屏过后的菜单或和游戏主界面也是在Canvas或者GameCanvas上绘制,所以可以实现平滑的切换。
       下面的代码给出了利用Canvas实现两个Splash Screen的方式,当然如果愿意的话,我们还可以在其中加入一些特效:
/*
 * HenCanvas.java
 *
 * Created on 2006年7月25日, 下午4:42
 *
 */

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;

/**
 *
 * @author mydeman
 */
public class HenCanvas extends Canvas implements Runnable{
 
  Image img1;
  Image img2;
 
  //splah的页面索引
  int splash_index = 0;
 
  //每次循环的时间间隔
  private static final int INTERVAL = 100;
 
  public HenCanvas() {
    try {
      img2 = Image.createImage("/image2.png");
    } catch(Exception e) {}
    //设置全屏模式
    setFullScreenMode(true);
    //启动线程
    Thread t = new Thread(this);
    t.start();
  }
 
  /**
   * 绘制方法
   */
  protected void paint(Graphics g) {
    switch(splash_index) {
      //绘制第一个闪屏
      case 0 :
        g.setColor(255, 255, 255);
        g.fillRect(0, 0, 240, 320);
        g.drawImage(img2, 120, 160, Graphics.HCENTER|Graphics.VCENTER);
        break;
      //绘制第二个闪屏
      case 1 :
        g.setColor(255, 255, 255);
        g.fillRect(0, 0, 240, 320);
        g.drawImage(img1, 120, 160, Graphics.HCENTER|Graphics.VCENTER);
        break;
    }
  }
 
  /**
   * 运行
   */
  public void run() {
    long curtime = 0;
    //得到刚开始运行的时间
    long oldtime = System.currentTimeMillis();
    while(true) {
      //获得当前时间
      curtime = System.currentTimeMillis();
      switch(splash_index) {
        case 0 :
          //如果在第一个页面停留了两秒则开始显示第二个页面
          if(curtime > oldtime + INTERVAL * 20) {
            img2 = null;
            System.gc();
            splash_index = 1;
            try {
              img1 = Image.createImage("/image1.png");
            } catch(Exception e) {}
            //刷新屏幕
            refresh();
          }
          break;
      }
    }
  }
 
  /**
   * 刷新屏幕
   */
  private final void refresh() {
    repaint();
    serviceRepaints();
  }
}

 
目录
相关文章
|
17天前
|
Web App开发 运维 安全
2025年十大远程控制软件专业横评:十大主流工具深度解析与选型建议
2025年十大远程控制软件深度横评:从性能、画质、功能、跨平台及体验五大维度,全面解析连连控、AnyDesk、TeamViewer等主流工具。专业用户如何选?本文揭晓综合实力最强之选,助你高效远程协作。
|
消息中间件 数据可视化 大数据
【如何安装和配置RabbitMQ(转载)】
【如何安装和配置RabbitMQ(转载)】
173 2
|
7月前
|
人工智能 运维 监控
从大规模恶意攻击 DeepSeek 事件看 AI 创新隐忧:安全可观测体系建设刻不容缓
本文探讨了中国大模型DeepSeek在全球范围内的成功及其面临的网络安全挑战。DeepSeek以低成本、高性能的特点迅速走红,甚至超越ChatGPT,但同时也遭受了大规模恶意攻击,如DDoS和密码暴力破解。文章分析了这些攻击对AI行业的影响,并提出通过阿里云构建安全可观测体系的解决方案,包括流量监控、日志审计与异常检测等,为AI技术的安全发展提供保障。
288 1
|
7月前
|
机器学习/深度学习 并行计算 PyTorch
英伟达新一代GPU架构(50系列显卡)PyTorch兼容性解决方案
本文记录了在RTX 5070 Ti上运行PyTorch时遇到的CUDA兼容性问题,分析其根源为预编译二进制文件不支持sm_120架构,并提出解决方案:使用PyTorch Nightly版本、更新CUDA工具包至12.8。通过清理环境并安装支持新架构的组件,成功解决兼容性问题。文章总结了深度学习环境中硬件与框架兼容性的关键策略,强调Nightly构建版本和环境一致性的重要性,为开发者提供参考。
3796 64
英伟达新一代GPU架构(50系列显卡)PyTorch兼容性解决方案
|
小程序 Java 关系型数据库
微信记账小程序
微信记账小程序
715 0
|
Dart 前端开发 开发工具
【Flutter前端技术开发专栏】探索Flutter的世界
【4月更文挑战第30天】Flutter是谷歌的UI框架,用于构建高性能、跨平台的iOS和Android应用。它使用Dart语言,提供丰富的预置组件,支持热重载,确保跨平台一致性。Flutter的亮点包括高性能渲染、丰富的组件库、国际化的支持。开发者可通过安装SDK和IDE插件开始开发,熟悉Widget、StatefulWidget、StatelessWidget等核心概念。其潜力和前景在移动应用开发领域备受关注,丰富的生态系统包含第三方库和工具,如网络请求和状态管理。学习Flutter对前端开发者极具价值。
230 0
【Flutter前端技术开发专栏】探索Flutter的世界
|
机器学习/深度学习 人工智能 算法
AI技术在医疗诊断中的应用
【8月更文挑战第28天】随着人工智能技术的不断发展,其在医疗领域的应用也越来越广泛。本文将介绍AI技术在医疗诊断中的应用,包括医学影像分析、基因数据分析和疾病预测等方面。通过代码示例,我们将展示如何使用深度学习算法进行医学影像分析和基因数据分析。最后,我们将讨论AI技术在医疗诊断中的优势和挑战。
|
SQL 数据采集 关系型数据库
sqlyog下载和卸载的最新详细过程,超多图快速安装或者卸载
sqlyog下载和卸载的最新详细过程,超多图快速安装或者卸载
3657 0
|
JavaScript 数据库 Python
数据库系统概论——函数依赖、码和范式(1NF、2NF、3NF、BCNF)详解
关系模式由五部分组成,即它是一个五元组: R(U,D,DOM,F)R(U, D, DOM, F)R(U,D,DOM,F)关系模式R(U,D,DOM,F)R(U, D, DOM, F)R(U,D,DOM,F)中,DDD和DOMDOMDOM与逻辑结构设计关系不大,因此,将关系模式简化为一个三元组:当且仅当UUU上的一个关系rrr 满足FFF时,rrr称为关系模式R(U,F)R(U, F)R(U,F)的一个。设R(U)R(U)R(U)是一个属性集UUU上的关系模式,XXX和YYY是UUU的子集。若对于R(U)R(
1012 0
数据库系统概论——函数依赖、码和范式(1NF、2NF、3NF、BCNF)详解
|
存储 XML 安全
GTK入门
GTK入门
541 0