?? democanvas.java
字號:
package com.j2medev.chapter5;
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
import java.io.*;
public class DemoCanvas
extends GameCanvas
implements CommandListener, Runnable {
private Image imgA,imgB;//飛機(imgA)和敵人(imgB)的Image對象
private Image mapImg0,mapImg1;//背景0和背景1的Image對象
private TiledLayer tiledLayer0;//背景0
private TiledLayer tiledLayer1;//背景1
private LayerManager layers;//管理所有層的層管理器
private Sprite spriteA,spriteB;//聲明精靈A和精靈B對象
private int keyState;//按鍵狀態
private boolean collideSta;//狀態變量,表示是否碰撞
private Graphics g;//畫筆的引用
private int Ypos0;//可視窗口的縱坐標
public DemoCanvas() {
//構造GameCanvas,參數true意味著CameCanvas不會自動調用KeyPressed,keyRepeated,keyReleased方法
super(true);
//全屏
this.setFullScreenMode(true);
try {//初始化兩個精靈的Image對象和兩個背景的Image對象
imgA = Image.createImage("/img0.png");
imgB = Image.createImage("/img1.png");
mapImg0 = Image.createImage("/map0.png");
mapImg1 = Image.createImage("/map1.png");
} catch (IOException ex) {
ex.printStackTrace();
}
tiledLayer0 = new TiledLayer(9,20,mapImg0,28,28);//實例化背景層0,用mapImg0填充20行9列
tiledLayer1 = new TiledLayer(12,11,mapImg1,21,40);//實例化背景層1,用mapImg1填充11行12列
tiledLayer1.setPosition(-6,0);//初始化背景層1的位置
int[][] map0 = {//背景層0的塊兒分布(全用1號塊兒填充)
{ 1,1,1,1,1,1,1,1,1},
{ 1,1,1,1,1,1,1,1,1},
{ 1,1,1,1,1,1,1,1,1},
{ 1,1,1,1,1,1,1,1,1},
{ 1,1,1,1,1,1,1,1,1},
{ 1,1,1,1,1,1,1,1,1},
{ 1,1,1,1,1,1,1,1,1},
{ 1,1,1,1,1,1,1,1,1},
{ 1,1,1,1,1,1,1,1,1},
{ 1,1,1,1,1,1,1,1,1},
{ 1,1,1,1,1,1,1,1,1},
{ 1,1,1,1,1,1,1,1,1},
{ 1,1,1,1,1,1,1,1,1},
{ 1,1,1,1,1,1,1,1,1},
{ 1,1,1,1,1,1,1,1,1},
{ 1,1,1,1,1,1,1,1,1},
{ 1,1,1,1,1,1,1,1,1},
{ 1,1,1,1,1,1,1,1,1},
{ 1,1,1,1,1,1,1,1,1},
{ 1,1,1,1,1,1,1,1,1}
};
int[][] map1 = {//背景層1的塊兒分布(左側用1號塊兒填充,右側用2號塊兒填充,其它位置不填)
{ 1,0,0,0,0,0,0,0,0,0,0,2},
{ 1,0,0,0,0,0,0,0,0,0,0,2},
{ 1,0,0,0,0,0,0,0,0,0,0,2},
{ 1,0,0,0,0,0,0,0,0,0,0,2},
{ 1,0,0,0,0,0,0,0,0,0,0,2},
{ 1,0,0,0,0,0,0,0,0,0,0,2},
{ 1,0,0,0,0,0,0,0,0,0,0,2},
{ 1,0,0,0,0,0,0,0,0,0,0,2},
{ 1,0,0,0,0,0,0,0,0,0,0,2},
{ 1,0,0,0,0,0,0,0,0,0,0,2},
{ 1,0,0,0,0,0,0,0,0,0,0,2},
};
//利用map0中的地圖信息填充背景層0
for (int i = 0; i < map0.length; i++)
for(int j = 0;j<map0[i].length;j++)
tiledLayer0.setCell(j, i, map0[i][j]);
spriteA = new Sprite(imgA,110,89);//實例化精靈A
spriteB = new Sprite(imgB,80,80);//實例化精靈B
spriteA.setPosition(50,100);//初始化精靈A的位置
spriteB.setPosition(50,0);//初始化精靈B的位置
layers= new LayerManager();//實例化一個層管理器
layers.append(tiledLayer0);//將背景層添加到層管理器中
Ypos0 = tiledLayer0.getHeight() - this.getHeight();//初始化背景層0的位置
this.setFullScreenMode(true);//全屏
setCommandListener(this);
addCommand(new Command("Exit", Command.EXIT, 1));
new Thread(this).start();//啟動GameCanvas線程
}
public void check(){//碰撞檢測
if(spriteA.collidesWith(spriteB,true)) collideSta = true;
else collideSta = false;
}
public void run() {
while (true) {
// repaint();
this.g = getGraphics();//獲取畫筆
keyState = getKeyStates();//獲取按鍵狀態
//精靈A向左移動
if((keyState & this.LEFT_PRESSED)!=0){
spriteA.move(-3,0);
}
//精靈A向右移動
if((keyState & this.RIGHT_PRESSED)!=0){
spriteA.move(3,0);
}
//精靈A向上移動
if((keyState & this.UP_PRESSED)!=0){
spriteA.move(0,-3);
}
//精靈A向下移動
if((keyState & this.DOWN_PRESSED)!=0){
spriteA.move(0,3);
}
check();//碰撞檢測
this.draw(g);//調用自定義的畫圖方法
try {
Thread.sleep(33);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void draw(Graphics g) {
//清屏
g.setColor(0);
g.fillRect(0,0,this.getWidth(),this.getHeight());
//準備畫下一幀
spriteA.nextFrame();
//實現背景0的循環滾動,實際上是可視窗口在循環滾動
if(Ypos0<=0) Ypos0 = tiledLayer0.getHeight() - this.getHeight();
//設置可視區域
layers.setViewWindow(0,Ypos0,this.getWidth(),this.getHeight());
//可視窗口向上移動
Ypos0 = Ypos0-2;
//畫出層管理器中的所有層
layers.paint(g,0,0);
//畫精靈A
spriteA.paint(g);
//刷新
flushGraphics();
}
public void keyPressed(int keyCode) {
//System.out.println(" ");
}
public void commandAction(Command command, Displayable displayable) {
if (command.getCommandType() == Command.EXIT) {
GameDemo.quitApp();
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -