使用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();
}
}

你可能感兴趣的:(thread,游戏)