|

楼主 |
发表于 2006-5-22 16:33:00
|
显示全部楼层
Re:J2ME手机游戏快速入门
上面的代码应该很简单吧?这时程序已经能运算我们的数据,并且可以显示到屏幕上了.但是还
是暂短的,程序一运行就结束了,于是就要作一个死循环让程序不断的运行下去,如果直接用这个
死循环while(true){}程序就会卡死在那里,呵呵死机,于是就要作一个线程序,让这个循环放在
线程序中.多线程不是容易作的,但是J2ME为我们提供了一个接口,再重载线程的方法就方便多了
如:
public class main extends MIDlet implements Runnable
只是加上了一句 implements Runnable
然后在程序中重载:
public void run(){}
接着就:new Thread(this).start();
这样去启动线程
什么样简单吧?下面来试验一下.用字符O表示一个对象,程序要让这个O在屏幕中移动,碰中屏幕
边框就会反弹,就象跳跳球游戏那样,用两个变量记住O的当前位置,用两个变量记住O的移动量
int xm=20,ym=20,vx=3,vy=3;
另外要用两个变量记住屏幕的大小
int width=0,height=0;
然后让xm和ym在循环中作这样的运算:
xm+=vx;
ym+=vy;
if(xm<0 || xm>width) vx=-vx;
if(ym<0 || ym>height) vy=-vy;
接着用显示文字的方法通过xm,ym作为坐标显示到屏幕里
下面是完整的代码
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class main extends MIDlet implements Runnable
{
private CScreen screen=null; //声明一个screen变量,类型是一个类CScreen
private int xm=20,ym=20,vx=3,vy=3;
private int width=0,height=0;
public main(){}
public void startApp()
{
screen=new CScreen(); //创建这个类
Display.getDisplay(this).setCurrent(screen);
screen.repaint(); //使用类中的父类(继承)的repaint强调重画屏幕方法
new Thread(this).start(); //启动线程
}
public void pauseApp(){}
public void destroyApp(boolean unconditional)
{
screen=null; //释放这个类
}
public void run()
{
while(true)
{
try{Thread.sleep(50);}catch(Exception e){} //程序限针
xm+=vx;
ym+=vy;
if(xm<0 || xm>width) vx=-vx;
if(ym<0 || ym>height) vy=-vy;
screen.repaint(); //使用类中的父类(继承)的repaint强调重画屏幕方法
}
}
//定义屏幕类
public class CScreen extends Canvas
{
public CScreen()
{
width=getWidth(); //得到屏幕的大小
height=getHeight();
}
public void paint(Graphics g)
{
g.setColor(0x00ff00); //调置为绿色
g.fillRect(0,0,getWidth(),getHeight()); //填充一个绿色矩形
g.setColor(0xff0000); //O为红色
g.drawString("O",xm,ym,Graphics.LEFT|Graphics.TOP);
}
}
}
|
|