⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mariosprite.java

📁 J2ME编程的50个例子,适合掌上系统的编程
💻 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 + -