📄 tanksprite.java
字号:
import java.io.IOException;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.Sprite;
//坦克类
public class TankSprite extends Sprite {
protected int m_nDir; //坦克的方向(0上方、1右方、2下方、3左方)
protected int m_nLastMovX = 0; //坦克上次移动的X方向距离
protected int m_nLastMovY = 0; //坦克上次移动的Y方向距离
protected int m_nSpeed = 0; //坦克的移动速率(注意不是速度)
public BulletSprite m_Bullet; //坦克携带的炮弹
public TankSprite(Image image, int frameWidth, int frameHeight) {
super(image, frameWidth, frameHeight);
defineReferencePixel(frameWidth / 2, frameHeight / 2);
setVisible( false );
try{
Image img = Image.createImage("/demo/bullets.png");
m_Bullet = new BulletSprite(img,3,3);
}
catch(IOException ioe){}
catch(Exception e){}
}
//产生坦克
//参数nX、nY分别是坦克位置的横纵坐标
//参数nDir指定坦克方向,参数nSpeed指定坦克速率
public void Start( int nX, int nY, int nDir, int nSpeed ){
SetDir( nDir );
setRefPixelPosition( nX, nY );
m_nSpeed = nSpeed;
setVisible( true );
}
//坦克活动停止,坦克消失
public void Stop() {
setVisible(false);
}
//逻辑操作,控制炮弹
public void Logic(){
m_Bullet.Logic();
}
//设置方向
public void SetDir( int nDir ){
m_nDir = nDir;
switch( m_nDir ){
case 0: //上方
setTransform(TRANS_NONE);
break;
case 1: //右方
setTransform(TRANS_ROT90);
break;
case 2: //下方
setTransform(TRANS_ROT180);
break;
default: //左方
setTransform(TRANS_MIRROR_ROT270);
break;
}
}
//移动坦克,参数nX、nY分别是移动的X、Y方向的距离
public void Move(int nX, int nY) {
int nToX = getRefPixelX() + nX;
int nToY = getRefPixelY() + nY;
m_nLastMovX = nX; //记录本次移动的距离
m_nLastMovY = nY;
setRefPixelPosition( nToX, nToY );
}
//坦克向后退
public void MoveBack() {
Move( -m_nLastMovX, -m_nLastMovY );
m_nLastMovX = 0;
m_nLastMovY = 0;
}
//发射炮弹
public void CreateBullet(){
if( m_Bullet.isVisible() )
return;
m_Bullet.setVisible(true);
int nX = getRefPixelX();
int nY = getRefPixelY();
m_Bullet.Start( nX, nY, m_nDir, 3 );
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -