使用Canvas实现Splash

 游戏中的开头一般都需要使用闪屏(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();
  }
}

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mydeman

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值