?? player.java
字號:
package org.gamecollege.j2me.rpg;
import javax.microedition.lcdui.game.Layer;
import javax.microedition.lcdui.game.LayerManager;
import javax.microedition.lcdui.game.Sprite;
import java.util.Vector;
/**
* 該類封裝主角對象
*/
public class Player {
/**
* 主角運動方向常量 向下
*/
public static final int DOWN = 0;
/**
* 主角運動方向常量 向上
*/
public static final int UP = 3;
/**
* 主角運動方向常量 向左
*/
public static final int LEFT = 6;
/**
* 主角運動方向常量 向右
*/
public static final int RIGHT = 9;
/**
* 主角運動方向常量 靜止
*/
public static final int STILL = -1;
//當(dāng)前運動方向
int dir;
//某一方向移動幀數(shù):比如向右走的動畫有3幀
int stepCount;
//某一方向最大移動幀數(shù)
public static final int FRAMES_MOVE = 3;
//武器集合
Vector weaponVec = new Vector();
//護(hù)具集合
Vector jacketVec = new Vector();
//藥品集合
Vector medicVec = new Vector();
//技能集合
Vector skillVec = new Vector();
//主角名稱
String name;
//攻擊狀態(tài) -1:未攻擊,0:普通攻擊狀態(tài)0 1:普通攻擊狀態(tài)1 2:普通攻擊狀態(tài)2 1979:魔法攻擊0 1980 魔法攻擊1
int attackStatus = -1;
/**
* 主角上次移動的距離,x方向
*
* @see #undoMove()
*/
int lastStep_x;
/**
* 主角上次移動的距離,y方向
*
* @see #undoMove()
*/
int lastStep_y;
//移動速度
int rate = -1;
//金錢
int money = -1;
//hp
int hp = -1;
//mp
int mp = -1;
//關(guān)卡初始化后,具有的經(jīng)驗值
int levelInitExp = -1;
//經(jīng)驗值
int exp = -1;
//當(dāng)前等級
int rank = -1;
//下一級所要求的經(jīng)驗值
int nextExp = -1;
//攻擊力
int attackPoint = -1;
//防御力
int defendPoint = -1;
//所在地圖的行號和列號
int col = -1, row = -1;
//當(dāng)前武器ID
int curWeaponID = -1;
//當(dāng)前護(hù)具ID
int curDefendID = -1;
//主角移動次數(shù),利用該次數(shù)可以控制什么時候出現(xiàn)隨機敵人
int moveTimes;
//主角所擁有的物品的id字串,用"|"分割,這是持久存儲用的
String propertyIDs;
//主角所擁有的技能的id字串,用"|"分割,這是持久存儲用的
String skillIDs;
//攻擊之前的主角精靈
private Sprite beforeAttackSprite;
//攻擊中的主角精靈
private Sprite attackingSprite;
//行走中的主角精靈
private Sprite walkSprite;
//主角的狀態(tài)常量:行走中
public static final int STATUS_WALK = 0;
//主角的狀態(tài)常量:攻擊前
public static final int STATUS_BEFORE_ATTACK = 1;
//主角的狀態(tài)常量:攻擊中
public static final int STATUS_ATTACk = 2;
// 戰(zhàn)斗中釋放的技能
Skill fireSkill;
/**
* 根據(jù)主角名字夠造主角對象
*
* @param name
* 主角名字
*/
public Player(String name) {
this.name = name;
constructSprites();
}
/**
* 初始化主角的所有精靈
*
*/
private void constructSprites() {
walkSprite = new Sprite(ResourceLoader.players[0], 32, 32);
beforeAttackSprite = new Sprite(ResourceLoader.players[1], 41, 46);
attackingSprite = new Sprite(ResourceLoader.players[2], 32, 32);
}
/**
* 移動方法
* @param _dir
*/
public void move(int _dir) {
//方向和原方向一致,則修改動畫幀
if (this.dir == _dir) {
stepCount = stepCount + 1 >= FRAMES_MOVE ? 0 : stepCount + 1;
} else if (_dir != STILL) {
//新方向,從第一幀開始
this.dir = _dir;
stepCount = 0;
} else {
//靜止?fàn)顟B(tài)
stepCount = 0;
walkSprite.setFrame(dir);
return;
}
//修改動畫幀
walkSprite.setFrame(dir + stepCount);
int stepx = 0;
int stepy = 0;
switch (dir) {
case UP:
stepy = -rate;
break;
case DOWN:
stepy = rate;
break;
case LEFT:
stepx = -rate;
break;
case RIGHT:
stepx = rate;
break;
}
//移動位置
walkSprite.setPosition(walkSprite.getX() + stepx, walkSprite.getY()
+ stepy);
this.lastStep_x = stepx;
this.lastStep_y = stepy;
//更新col,row屬性
this.col = walkSprite.getX() / MyRPGGameMIDlet.mc.curLevel.tileWidth;
this.row = walkSprite.getY() / MyRPGGameMIDlet.mc.curLevel.tileHeight;
//增加移動次數(shù)
moveTimes++;
}
/**
* 撤銷主角上次移動動作
*/
public void undoMove() {
walkSprite.move(-lastStep_x, -lastStep_y);
}
/**
* 添加主角攜帶物品
*
* @param p
* 1:武器類 2:藥品類 3:護(hù)具類,4:技能 物品/道具
*/
public void addSth(RPGObject p) {
if (p instanceof Skill) {
this.skillVec.addElement(p);
} else {
Property p2 = (Property) p;
switch (p2.type) {
case 1:
this.weaponVec.addElement(p);
break;
case 2:
this.medicVec.addElement(p);
break;
case 3:
this.jacketVec.addElement(p);
break;
}
}
}
/**
* 刪除主角擁有的某個物品
* @param p
*/
public void removeSth(RPGObject p) {
if (p instanceof Skill) {
this.skillVec.removeElement(p);
} else {
Property p2 = (Property) p;
switch (p2.type) {
case 1:
this.weaponVec.removeElement(p);
break;
case 2:
this.medicVec.removeElement(p);
break;
case 3:
this.jacketVec.removeElement(p);
break;
}
}
}
/**
* 獲取主角在不同狀態(tài)下的精靈
* @param status
* @return
*/
public Sprite getSprite(int status) {
switch (status) {
case STATUS_ATTACk:
return attackingSprite;
case STATUS_BEFORE_ATTACK:
return this.beforeAttackSprite;
case STATUS_WALK:
default:
return this.walkSprite;
}
}
/**
* 主角使用各種物品后的效果
* @param ro
*/
public void useObject(RPGObject ro) {
if (ro instanceof Skill) {
} else {
Property p = (Property) ro;
if (p.type == 1) {
this.curWeaponID = p.ID;
} else if (p.type == 2) {
this.hp += p.addHP;
this.mp += p.addMP;
this.medicVec.removeElement(p);
} else if (p.type == 3) {
this.curDefendID = p.ID;
}
}
}
/**
* 設(shè)置攻擊狀態(tài)。攻擊狀態(tài)為0的情況無需設(shè)置。一旦有對象把狀態(tài)設(shè)置為0,則游戲后臺線程會自動使用該方法進(jìn)行狀態(tài)轉(zhuǎn)換
* @param status
*/
public void setAttackStatusSprite(int status) {
this.attackStatus = status;
switch (status) {
case -1:
//攻擊之前
beforeAttackSprite.setPosition(80, 120);
beforeAttackSprite.setFrame(0);
break;
case 1:
//攻擊1
attackingSprite.setPosition(83, 108);
attackingSprite.setFrame(1);
break;
case 2:
//攻擊2
attackingSprite.setFrame(0);
attackingSprite.setPosition(83, 108);
break;
//魔法攻擊狀態(tài)0
case 1979:
beforeAttackSprite.setPosition(80, 120);
beforeAttackSprite.setFrame(1);
fireSkill.sprite.setFrame(0);
fireSkill.sprite.setPosition(110, 120);
break;
case 1980:
beforeAttackSprite.setPosition(80, 120);
beforeAttackSprite.setFrame(1);
fireSkill.sprite.setFrame(0);
fireSkill.sprite.setPosition(110, 100);
break;
}
//修改戰(zhàn)斗時所用的LayerManager
LayerManager lm = MyRPGGameMIDlet.mc.fightLayerManager;
if (lm != null) {
if (status < 1979) {
if (lm.getSize() == 3) {
Layer oldLayer = lm.getLayerAt(0);
lm.remove(oldLayer);
} else {
Layer oldLayer = lm.getLayerAt(0);
lm.remove(oldLayer);
oldLayer = lm.getLayerAt(1);
lm.remove(oldLayer);
}
if (status == -1) {
lm.insert(beforeAttackSprite, 0);
} else {
lm.insert(attackingSprite, 0);
}
} else {
if (lm.getSize() == 3) {
Layer oldLayer = lm.getLayerAt(0);
lm.remove(oldLayer);
} else {
Layer oldLayer = lm.getLayerAt(0);
lm.remove(oldLayer);
oldLayer = lm.getLayerAt(1);
lm.remove(oldLayer);
}
//添加人
lm.insert(beforeAttackSprite, 1);
//添加魔法
lm.insert(fireSkill.sprite, 0);
}
}
}
/**
* 獲取主角的真實攻擊力
* 真實攻擊力=本身攻擊力+武器護(hù)具增加的攻擊力
* 或者為魔法技能攻擊力
* @author Jagie
*
*/
public int getRealAttackPoint() {
int result = this.attackPoint;
if (attackStatus < 1979) {
Property w = (Property) MyRPGGameMIDlet.mc.curLevel.properties
.get(new Integer(curWeaponID));
Property d = (Property) MyRPGGameMIDlet.mc.curLevel.properties
.get(new Integer(curDefendID));
if (w != null) {
result += w.addAttackPoint;
}
if (d != null) {
result += d.addAttackPoint;
}
} else {
result += fireSkill.addAttackPoint;
}
return result;
}
/**
* 獲取主角的真實防御力
* 真實防御力=本身防御力+武器護(hù)具增加的防御力
* 或者為魔法技能防御力
* @return
*/
public int getRealDefendPoint() {
int result = this.defendPoint;
if (attackStatus < 1979) {
Property w = (Property) MyRPGGameMIDlet.mc.curLevel.properties
.get(new Integer(curWeaponID));
Property d = (Property) MyRPGGameMIDlet.mc.curLevel.properties
.get(new Integer(curDefendID));
if (w != null) {
result += w.addDefendPoint;
}
if (d != null) {
result += d.addDefendPoint;
}
} else {
result += fireSkill.addDefendPoint;
}
return result;
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -