📄 mariosprite.java
字号:
package demo;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.Sprite;
public class MarioSprite extends Sprite{
public static final int MARIO_NORMAL = 0; //正常状态
public static final int MARIO_RUN = 1; //在跑
public static final int MARIO_JUMP = 2; //跳
public static final int MARIO_DROP = 3; //向下落
public static final int MARIO_DEAD = 4; //马利奥死了
public static final int MARIO_STATE_NUM = 5; //状态总数
private int m_nState = MARIO_NORMAL;
private int m_nSpeedX = 2; //X方向运动的速度
private int m_nSpeedY = 2; //Y方向运动的速度
private int m_nTime = 0; //控制运动的时间
private int m_nLastMovX; //X方向上次移动的距离
private int m_nLastMovY; //Y方向上次移动的距离
MarioSprite(Image image, int frameWidth, int frameHeight) {
super(image, frameWidth, frameHeight);
defineReferencePixel( frameWidth / 2, frameHeight / 2 );
}
//获取当前状态
public int getState(){
return m_nState;
}
//设置当前状态
public void setState(int state){
if( state < 0 || state >= MARIO_STATE_NUM )
return;
m_nState = state;
switch( m_nState ){
case MARIO_JUMP:
m_nSpeedY = 9;
m_nTime = 2;
break;
}
}
//按键操作
public void Input(int keyStates){
switch( m_nState ){
case MARIO_NORMAL: //正常状态
case MARIO_RUN: //在跑
if( ( keyStates & GameCanvas.LEFT_PRESSED ) != 0 )
{//往左跑
m_nSpeedX = -2;
setTransform(Sprite.TRANS_MIRROR);
setState(MARIO_RUN);
}
else if( ( keyStates & GameCanvas.RIGHT_PRESSED ) != 0 )
{//往右跑
m_nSpeedX = 2;
setTransform(Sprite.TRANS_NONE);
setState(MARIO_RUN);
}
else if( ( keyStates & GameCanvas.UP_PRESSED ) != 0 )
{//跳
setState(MARIO_JUMP);
}
else
setState(MARIO_NORMAL);
break;
case MARIO_JUMP: //在跳
case MARIO_DROP:
if( ( keyStates & GameCanvas.LEFT_PRESSED ) != 0 ){
m_nSpeedX = -2;
setTransform(Sprite.TRANS_MIRROR);
}
else if( ( keyStates & GameCanvas.RIGHT_PRESSED ) != 0 ){
m_nSpeedX = 2;
setTransform(Sprite.TRANS_NONE);
}
else
m_nSpeedX = 0;
break;
}
}
public void Logic( int width ){
int x = getRefPixelX();
switch( m_nState ){
case MARIO_NORMAL: //正常状态
setFrame(0);
break;
case MARIO_RUN: //在跑
if( getFrame() == 0 )
setFrame(1);
else
setFrame(0);
x += m_nSpeedX;
if( x > 0 && x < width )
MoveAhead( m_nSpeedX, 0 );
break;
case MARIO_JUMP: //在跳
setFrame(2);
x += m_nSpeedX;
if( x > 0 && x < width )
MoveAhead( m_nSpeedX, -m_nSpeedY );
else
MoveAhead( 0, -m_nSpeedY );
m_nTime --;
if( m_nTime <= 0 ){
m_nTime = 2;
m_nSpeedY -= 1;
if( m_nSpeedY <= 0 ) //跳跃结束
setState(MARIO_DROP);
}
break;
case MARIO_DROP:
setFrame(2);
x += m_nSpeedX;
if( x > 0 && x < width )
MoveAhead( m_nSpeedX, 0 );
break;
}
}
//向前移动
public void MoveAhead( int x, int y ){
m_nLastMovX = x;
m_nLastMovY = y;
setRefPixelPosition(getRefPixelX()+x, getRefPixelY()+y);
}
//向后移动
public void MoveBack(){
int x = getRefPixelX();
int y = getRefPixelY();
setRefPixelPosition(x-m_nLastMovX, y-m_nLastMovY);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -