📄 mansprite.java
字号:
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.Sprite;
public class ManSprite extends Sprite {
public static final int MAN_RIGHT = 0; //向右跑
public static final int MAN_LEFT = 1; //向左跑
public static final int MAN_STOP_R = 2; //停下向右
public static final int MAN_STOP_L = 3; //停下向左
public static final int MAN_STATE_NUM = 4; //状态总数
private int m_nState = MAN_STOP_R;
protected int m_nSpeed = 1; //英雄的移动速率(注意不是速度)
public BulletSprite m_Bullet; //英雄携带的炮弹
public ManSprite(Image image, int frameWidth, int frameHeight) {
super(image, frameWidth, frameHeight);
defineReferencePixel(frameWidth / 2, frameHeight / 2);
try{
Image img = Image.createImage("/demo/bullet.png");
m_Bullet = new BulletSprite(img,3,3);
}
catch(Exception e){}
}
//设置状态
public void setState(int state){
if( state < 0 || state >= MAN_STATE_NUM )
return;
m_nState = state;
}
//获取状态
public int getState(){
return m_nState;
}
//处理按键的操作,参数keyStates为按键状态
public void Input( int keyStates )
{
int x = getRefPixelX();
int y = getRefPixelY();
if ((keyStates & GameCanvas.LEFT_PRESSED) != 0)
{//向左跑
setState(MAN_LEFT);
x -= m_nSpeed;
}
else if ((keyStates & GameCanvas.RIGHT_PRESSED) != 0)
{//向右跑
setState(MAN_RIGHT);
x += m_nSpeed;
}
else{
switch( m_nState ){
case MAN_RIGHT:
setState(MAN_STOP_R);
break;
case MAN_LEFT:
setState(MAN_STOP_L);
break;
}
}
setRefPixelPosition(x, y);
if ((keyStates & GameCanvas.FIRE_PRESSED) != 0)
{//发射炮弹
CreateBullet();
}
}
//逻辑操作
public void Logic(int scrWidth, int scrHeight){
//控制炮弹
m_Bullet.Logic(scrWidth, scrHeight);
int n = getFrame();
//根据状态设置各种动画
switch( m_nState ){
case MAN_RIGHT:
if( n == 1 )
setFrame(2);
else
setFrame(1);
setTransform(Sprite.TRANS_NONE);
break;
case MAN_LEFT:
if( n == 1 )
setFrame(2);
else
setFrame(1);
setTransform(Sprite.TRANS_MIRROR);
break;
case MAN_STOP_R:
setFrame(0);
setTransform(Sprite.TRANS_NONE);
break;
case MAN_STOP_L:
setFrame(0);
setTransform(Sprite.TRANS_MIRROR);
break;
}
}
//发射炮弹
public void CreateBullet(){
if( m_Bullet.isVisible() )
return;
m_Bullet.setVisible(true);
int nX = getX();
int nY = getY() + getHeight() / 2 - 5;
boolean bRight = false;
switch( m_nState ){
case MAN_RIGHT:
case MAN_STOP_R:
bRight = true;
nX = nX + getWidth();
break;
}
m_Bullet.Start( nX, nY, bRight, 5 );
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -