?? mycanvas.java
字號:
import javax.microedition.lcdui.*;import javax.microedition.lcdui.game.*;import java.io.IOException;public class MyCanvas extends GameCanvas implements Runnable,CommandListener { private LayerManagerDemo midlet;//程序控制類 private volatile Thread animationThread=null;//線程 private TiledLayer mBackground;//地圖 private LayerManager mLayerManager; private int canvasHeight, canvasWidth;//屏幕高度/寬度 private static int tileHeight,tileWidth;//地圖的高度/ private static int columns,rows; private static int mapWidth,mapHeight; private boolean isRun; private int curX,curY;//當前viewer坐標 private int xOffset = 5,yOffset = 5; private final int SLEEP=10; private Command exit; public MyCanvas(LayerManagerDemo midlet) { super(true); this.midlet = midlet; canvasHeight=getHeight(); canvasWidth=getWidth(); try{ mBackground = createBackground();//創建背景 }catch(IOException e){ System.out.println("create error"); } mLayerManager = new LayerManager();//創建層管理實例 mLayerManager.append(mBackground);//添加地圖 exit=new Command("Exit", Command.STOP,1); this.addCommand(exit); this.setCommandListener(this);//兩個按鍵 } synchronized void start() { isRun=true; animationThread=new Thread(this); animationThread.start(); } public void run() { Graphics g = this.getGraphics(); try { while (isRun) { input(); tick(); render(g); Thread.sleep(SLEEP); } } catch(InterruptedException ie) { System.out.println(ie.toString()); } } private TiledLayer createBackground()throws IOException { Image image = Image.createImage("/background.png");//創建背景圖片 TiledLayer tiledLayer = new TiledLayer(5, 5, image, 78, 36);//注意:背景的參數的設置! int LEA = 1;//草地lea int FLD = 2;//田地filed int HSE = 3;//房子house int TRE = 4;//樹木tree int WOD = 5;//樹叢wood int LAK = 6;//湖泊lake tileWidth = 78; tileHeight = 36; columns = 5; rows = 5; mapWidth =tileWidth*columns; mapHeight = tileHeight*rows; int[] map = {//地圖數組 LEA,FLD,TRE,FLD,FLD, LEA,LEA,LAK,WOD,LEA, HSE,LEA,HSE,WOD,FLD, WOD,LAK,HSE,LEA,WOD, HSE,LEA,LEA,TRE,LAK, };//顯示地圖 for (int i = 0; i < map.length; i++) { int column = i % columns; int row = (i - column) / columns; tiledLayer.setCell(column, row, map[i]);//通過一個循環來設置tiledLayer } return tiledLayer;//返回 } private void input(){ int keyState = getKeyStates(); //獲得鍵盤狀態 if ((keyState & LEFT_PRESSED) != 0) { //如果左鍵被按下 curX = curX - xOffset; // if(curX >= 0)curX=0; } if ((keyState & RIGHT_PRESSED) != 0) { //如果右鍵被按下 curX = curX + xOffset; // if(curX <= -mapWidth + canvasWidth)curX = -mapWidth + canvasWidth; } if ((keyState & UP_PRESSED) != 0) { //如果上鍵被按下 curY = curY - yOffset; //if(curY >= 0)curY=0; } if ((keyState & DOWN_PRESSED) != 0) { //如果下鍵被按下 curY = curY + yOffset; //if(curY <= -mapHeight + canvasHeight)curY = -mapHeight + canvasHeight; } } private void tick(){ //mBackground.setPosition(curX,curY); // mLayerManager.setViewWindow(curX,curY,canvasWidth/2,canvasHeight/2); } private void render(Graphics g){ mBackground.setPosition(50,50); mBackground.paint(g); //mLayerManager.paint(g,50, 50); flushGraphics(); } synchronized void stop() { isRun=false; } public void commandAction(Command c, Displayable d) { //if any Exit key is pressed then exit if(c==exit) { midlet.exitMidlet(); } } }
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -