?? maincanvas.java~11~
字號:
package simplegage;
import java.io.IOException;
import javax.microedition.lcdui.*;
class MainCanvas extends Canvas implements Runnable{
private Image bg = null;//背景圖片
private Image img = null;//原始精靈圖片
private Image[][] sprite = new Image[4][3];//代表精靈序列
//坐標變換的x,y
private int tx = 0;
private int ty = 0;
//精靈運行的方向
private boolean leftPressed = false;
private boolean rightPressed = false;
private boolean upPressed = false;
private boolean downPressed = false;
//dir和seq共同確定當前顯示哪個精靈,dir代表行,seq代表列
private int dir = 2;
private int seq = 0;
public static final int DISTANCE = 4;
private int wd=0;
private int ht=0;
public MainCanvas(){
try{
bg = Image.createImage("/forest08.png");
img = Image.createImage("/people.png");
Image tmp = null;
//將people.png分割生成sprite精靈數組
for(int i=0;i<4;i++){
for(int j=0;j<3;j++){
tmp = null;
//使用Nokia UI API創建一個背景透明的圖片
tmp = Image.createImage(24,32);//,0x00ffffff);
Graphics g = tmp.getGraphics();
g.translate(-24*j,-32*i);
g.drawImage(img,0,0,Graphics.LEFT|Graphics.TOP);
sprite[i][j]=Image.createImage(tmp);
}
}
img = null;//釋放img對象
new Thread(this).start();
}catch(IOException ex){
ex.printStackTrace();
}
}
//通過線程和按鍵標記實現連續按鍵的效果
public void run(){
while(true){
if(leftPressed){
left();
}else if(rightPressed){
right();
}else if(upPressed){
up();
}else if(downPressed){
down();
}
try{
Thread.sleep(100);
}catch(Exception ex){
ex.printStackTrace();
}
}
}
public void left(){
tx+=DISTANCE;
if(tx>wd/2)
tx=wd/2;
repaint();
}
public void right(){
tx-=DISTANCE;
if(tx<-wd/2)
tx=-wd/2;
repaint();
}
public void up(){
ty+=DISTANCE;
if(ty>ht/2)
ty=ht/2;
repaint();
}
public void down(){
ty-=DISTANCE;
if(ty<-ht/2)
ty=-ht/2;
repaint();
}
public void paint(Graphics g){
//清除前一屏幕
int color = g.getColor();
g.setColor(0xffffff);
wd=getWidth();
ht=getHeight();
g.fillRect(0,0,getWidth(),getHeight());
g.setColor(color);
//變化坐標,繪制背景圖片
//g.translate(tx,ty);
g.drawImage(bg,getWidth()/2,getHeight()/2,Graphics.HCENTER|Graphics.VCENTER);
//g.translate(-tx,-ty);
//更換精靈序列,總在同一位置繪畫精靈,運動的是背景而不是精靈
seq = ++seq%3;
g.drawImage(sprite[dir][seq],getWidth()/2-tx,getHeight()/2-ty,Graphics.HCENTER|Graphics.VCENTER);
}
public void keyPressed(int keyCode){
int action = getGameAction(keyCode);
//根據按鍵的方向判斷應該使用哪個方向的精靈,與sprite數組對應
switch(action){
case DOWN:
downPressed = true;
upPressed = false;
leftPressed = false;
rightPressed = false;
dir = 2;
break;
case UP:
downPressed = false;
upPressed = false;
leftPressed = false;
rightPressed = false;
upPressed = true;
dir = 0;
break;
case LEFT:{
downPressed = false;
upPressed = false;
leftPressed = false;
rightPressed = false;
leftPressed = true;
dir = 3;
break;
}case RIGHT:{
downPressed = false;
upPressed = false;
leftPressed = false;
rightPressed = true;
dir = 1;
break;
}
default:
break;
}
repaint();
}
public void keyReleased(int keyCode){
int action = getGameAction(keyCode);
switch(action){
case DOWN:
// downPressed = false;
break;
case UP:
// upPressed = false;
break;
case LEFT:{
// leftPressed = false;
break;
}case RIGHT:{
// rightPressed = false;
break;
}
default:
break;
}
repaint();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -