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

📄 fightersprite.java

📁 J2ME编程的50个例子,适合掌上系统的编程
💻 JAVA
字号:
package demo;
import java.util.Random;

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.Sprite;


public class FighterSprite extends  Sprite{
	public static final int FIGHTER_NORMAL		= 0;	//正常状态
	public static final int FIGHTER_BOXING		= 1;	//打拳
	public static final int FIGHTER_BOOT			= 2;	//踢腿
	public static final int FIGHTER_WAVE			= 3;	//发波
	public static final int FIGHTER_STATE_NUM		= 4;	//状态总数
	private int m_nState = FIGHTER_NORMAL;
	private int m_nLife;									//生命值
	private boolean 	m_bRight	= true;					//是否面向右的标志
	public WaveSprite 	m_Wave;								//冲击波对象
	private Random		m_Random;							//随机数对象
	
	public FighterSprite(Image image, int frameWidth, int frameHeight) {
		super(image, frameWidth, frameHeight);
		defineReferencePixel( frameWidth / 2, frameHeight / 2 );
		setVisible(false);
		m_Random = new Random();
		try{
			Image wave = Image.createImage("/demo/wave.png");
			m_Wave = new WaveSprite(wave, 20, 12 );
		}
		catch(Exception e){}
	}
	//获取当前状态
	public int getState(){
		return m_nState;
	}
	//设置当前状态
	public void setState(int state){
		if( state < 0 || state >= FIGHTER_STATE_NUM )
			return;
		m_nState = state;
	}
	//获取生命值
	public int getLife(){
		return m_nLife;
	}
	//设置生命值
	public void setLife(int life){
		m_nLife = life;
	}
	//设置碰撞检测的范围
	public void setCollisionRect(){
		switch( m_nState ){
		case FIGHTER_BOXING:
			defineCollisionRectangle(20, 6, 9, 6);
			break;
		case FIGHTER_BOOT:
			defineCollisionRectangle(20, 22, 9, 6);
			break;
		}
		defineCollisionRectangle(0, 0, getWidth(), getHeight());
	}
	//设回默认的碰撞检测范围
	public void ResetCollisionRect(){
		defineCollisionRectangle(0, 0, getWidth(), getHeight());
	}
	//向后退
	public void MoveBack(int scrWidth){
		int dis = 4;
		if( !m_bRight )
			dis = -dis;
		int x = getRefPixelX();
		int y = getRefPixelY();
		x = x - dis;
		if( x >= getWidth()/2 && x < scrWidth - getWidth()/2  ){
			setRefPixelPosition(x, y);
		}
	}
	//开始战斗,参数nX、nY分别是斗士初始的横纵坐标
	//参数bRight为true表示斗士向右,反之斗士向左
	public void Start( int nX, int nY, boolean bRight ) {
		m_bRight	= bRight;
		setRefPixelPosition( nX, nY );
		m_nLife = 100;
		if( m_bRight )
			setTransform(Sprite.TRANS_NONE);
		else
			setTransform(Sprite.TRANS_MIRROR);
		setState(FIGHTER_NORMAL);
		m_Wave.setVisible(false);
		setVisible(true);
	}
	//处理按键操作,主要处理1号、3号及7号键的操作。参数scrWidth是屏幕的宽
	public void keyPressed(int keyCode, int scrWidth){
		switch( keyCode ){
		case Canvas.KEY_NUM1:
			setState(FIGHTER_BOXING);
			break;
		case Canvas.KEY_NUM3:
			setState(FIGHTER_BOOT);
			break;
		case Canvas.KEY_NUM7:
			setState(FIGHTER_WAVE);
			break;
		}
	}
	//处理其他按键的操作,参数scrWidth是屏幕的宽
	public void Input(int keyStates, int scrWidth){
		int x = getRefPixelX();
		int y = getRefPixelY();
		int speed = 2;
		if( !m_bRight )
			speed = - speed;
		if( ( keyStates & GameCanvas.RIGHT_PRESSED ) != 0 )
			x += speed;
		if( ( keyStates & GameCanvas.LEFT_PRESSED ) != 0 )
			x -= speed;
		if( x >= getWidth()/2 && x < scrWidth - getWidth()/2  ){
			setRefPixelPosition(x, y);
		}
	}
	//逻辑操作,参数scrWidth、scrHeight分别是屏幕的宽和高
	public void Logic( int scrWidth, int scrHeight ){
		m_Wave.Logic(scrWidth, scrHeight);
		switch( m_nState ){
		case FIGHTER_NORMAL:
			setFrame(0);
			break;
		case FIGHTER_BOXING:
			setFrame(1);
			setState(FIGHTER_NORMAL);
			break;
		case FIGHTER_BOOT:
			setFrame(2);
			setState(FIGHTER_NORMAL);
			break;
		case FIGHTER_WAVE:
			setFrame(3);
			if( !m_Wave.isVisible() ){
				if( m_bRight )
					m_Wave.Start( getX() + getWidth(), getY() + 15, m_bRight, 3);
				else
					m_Wave.Start( getX(), getY() + 15, m_bRight, 3);
			}
			setState(FIGHTER_NORMAL);
			break;
		}
	}
	//电脑自动输入,参数scrWidth、scrHeight分别是屏幕的宽和高
	//参数objectX是目标的位置
	public void AutoInput( int scrWidth, int scrHeight, int objectX ){
		int x = getRefPixelX();
		int y = getRefPixelY();
		int rand = Math.abs(m_Random.nextInt() % 20);
		if( Math.abs(x - objectX) < getWidth() + 2 )
		{//如果离目标比较近
			switch( rand ){
			case 0:
				setState(FIGHTER_BOXING);
				break;
			case 1:
				setState(FIGHTER_BOOT);
				break;
			case 2:
				setState(FIGHTER_WAVE);
				break;
			default:
				setState(FIGHTER_NORMAL);
				break;
			}
		}
		else
		{//如果离目标比较远
			int dis = 2;
			if( x - objectX < 0 )
				dis = -2;
			switch( rand ){
			case 0:
				setState(FIGHTER_WAVE);
				break;
			case 1:
			case 2:
			case 3:
			case 4:
			case 5:
			case 6:
				x -= dis;
				setState(FIGHTER_NORMAL);
				break;
			default:
				setState(FIGHTER_NORMAL);
			}
			if( x >= getWidth()/2 && x < scrWidth - getWidth()/2  ){
				setRefPixelPosition(x, y);
			}
		}
	}
	//显示图像,g对应手机屏幕
	public void Paint(Graphics g){
		super.paint(g);
		m_Wave.paint(g);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -