?? collidedemo.java
字號:
//collideDemo.java file
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.game.*;
import java.util.*;
public class collideDemo extends MIDlet implements CommandListener
{
private Command exitCommand,actCommand;
private DemoCanvas canvas;
private DemoTask task ;
private Timer timer;
public collideDemo()
{//創建命令,畫布和定時器
exitCommand =new Command("Exit",Command.EXIT,1);
actCommand =new Command("Action",Command.SCREEN,1);
canvas =new DemoCanvas();
canvas.addCommand(actCommand);
canvas.addCommand(exitCommand);
canvas.setCommandListener(this);
timer = new Timer();
task = new DemoTask(canvas);
}
protected void startApp( )
{//顯示畫布并開始游戲執行
Display.getDisplay(this).setCurrent(canvas);
timer.schedule(task, 0,100);
}
protected void pauseApp( )
{
timer.cancel();
}
protected void destroyApp( boolean p1 )
{
}
public void commandAction(Command c,Displayable d)
{
if (c ==exitCommand)
{
destroyApp(false);
notifyDestroyed();
}
else if (c ==actCommand)
canvas.Action();
}
public class DemoCanvas extends GameCanvas
{
private Graphics g;
private TiledLayer backLayer0;//背景圖層
private Image backImage0,objImage0,objImage1;//保存圖像
private Sprite objSprite0,objSprite1;//精靈
private int aniCounter =0;//計數器
private final int left2rightSeq[]={0, 1, 2, 3};//小球0的動畫序列
private final int right2leftSeq[]={3, 2, 1, 0};//小球1的動畫序列
private LayerManager layerMan;//圖層管理對象
private int moveMode =0;//移動模式,0:移動小球0,1:移動小球1
private int xDirection=0, yDirection=0;//移動距離
//記錄圖層backLayer0的每個單元對應的圖像塊序號
private byte[ ][ ] backMap=
{{1, 2, 2, 2, 2, 2, 2, 4},
{6, 0, 0, 0, 0, 0,12, 7},
{6, 0, 0, 0,10, 0, 0, 7},
{6, 0, 0, 0, 0, 0, 0, 7},
{6, 0, 0, 0, 0, 0,11, 7},
{6, 0, 0, 0, 9, 0, 0, 7},
{6, 0,11, 0, 0, 0, 0, 7},
{5, 3, 3, 3, 3, 3, 3, 8}};
public DemoCanvas()
{
super(true);
g = getGraphics();//得到作圖對象
try
{//裝入圖像
backImage0 = Image.createImage("/collide_bk.png");
objImage0 = Image.createImage("/collide1.png");
objImage1 = Image.createImage("/collide2.png");
} catch (Exception e) {}
//創建圖層,分塊大小為:17×17,單元格數量為:6×6
backLayer0 = new TiledLayer(8, 8, backImage0, 17, 17);
for(int y=0;y<8;y++)
{//逐個設置每個單元格的圖像,標記為0的單元格表示不處理
for(int x=0;x<8;x++)
backLayer0.setCell(x, y, backMap[y][x]);
}
objSprite0 = new Sprite(objImage0, 17,17);
objSprite0.setFrameSequence(left2rightSeq);
objSprite0.defineCollisionRectangle(0, 0, 17, 17);
objSprite0.move(20,20);
objSprite1 = new Sprite(objImage1, 17,17);
objSprite1.setFrameSequence(right2leftSeq);
objSprite1.defineCollisionRectangle(0, 0, 17, 17);
objSprite1.move(40,40);
layerMan = new LayerManager();
layerMan.append(objSprite0);
layerMan.append(objSprite1);
layerMan.append(backLayer0);
}
public void BallAction0()
{//直接修改單元格內的圖像
objSprite0.nextFrame();//動畫效果
objSprite0.move(xDirection, yDirection);//移動
//檢測碰撞,不采用象素級檢查
if( objSprite0.collidesWith(backLayer0,false)
|| objSprite0.collidesWith(objSprite1,false) )
{//如果移動后和其他背景或另一個物體發生碰撞則返回到原來位置
objSprite0.move(-xDirection, -yDirection);
}
}
public void BallAction1()
{//對第一球進行滾動
objSprite1.nextFrame();//動畫效果
objSprite1.move(xDirection, yDirection);//移動
//檢測碰撞,采用象素級檢查
if( objSprite1.collidesWith(backLayer0,true)
|| objSprite1.collidesWith(objSprite0,true) )
{//如果移動后和其他背景或另一個物體發生碰撞則返回到原來位置
objSprite1.move(-xDirection, -yDirection);
}
}
public void CheckKey()
{
int keyState = getKeyStates();
//判斷AB鍵是否被按下,用于在不同的小球間切換
if((keyState & GAME_A_PRESSED) !=0)
moveMode = 0;
else if((keyState & GAME_B_PRESSED) !=0)
moveMode = 1;
//判斷上下左右鍵是否被按下,修改移動距離
if((keyState & UP_PRESSED) !=0)
{
yDirection=-2;
}
else if((keyState & DOWN_PRESSED) !=0)
{
yDirection=2;
}
if((keyState & LEFT_PRESSED) !=0)
{
xDirection=-2;
}
else if((keyState & RIGHT_PRESSED) !=0)
{
xDirection=2;
}
}
//執行游戲功能
public void Action()
{
aniCounter ++;//增加計時器
g.setColor(0X00FFFFFF);
g.fillRect(0,0, 136, 136);
CheckKey();
if( moveMode ==0)
BallAction0();
else
BallAction1();
xDirection = yDirection =0;
layerMan.paint(g,0,0);
//刷新屏幕
flushGraphics();
}
}
public class DemoTask extends TimerTask
{
private DemoCanvas canvas;
public DemoTask(DemoCanvas can)
{
canvas = can;
}
public void run()
{
canvas.Action();
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -