motionWelder动作编辑器封装使用
motionWelder是一位印度先生写的动作编辑器.曾经使用时向作者提出过一些BUG.人家都修改了.可谓是好心人啊.现在这软件也越来越强大了.
下面是我使用中的一些封装..
他有两种方式一种是MSimpleAnimationPlayer.另一种是implements MSprite.前一种是简单动画.后一种自己实现MSprite接口.可能扩展
比如MSimpleAnimationPlayer.我将成封装成Simple_Animation类
package pupaClan;
//简单动画类
import javax.microedition.lcdui.Graphics;
import mgo.common.Gamedata;
import com.studio.motionwelder.MSimpleAnimationPlayer;
import com.studio.motionwelder.MSpriteData;
import com.studio.motionwelder.MSpriteLoader;
public class Simple_Animation {
public pupaClan_canvas canvas;
public byte animation_Id;
public final static byte loop_Once=-1;//一次
public final static byte loop_While=0;//无限
MSpriteData AnimationData=null;
MSimpleAnimationPlayer player=null;
//构造方法
public Simple_Animation(pupaClan_canvas canvas,String path,int animation_Id,int spriteX,int spriteY,boolean splitImageClips,int loopOffset){
try {
this.canvas=canvas;
this.animation_Id=(byte) animation_Id;
AnimationData=MSpriteLoader.loadMSprite(path,splitImageClips,ResourceLoader.getInstance());
player = new MSimpleAnimationPlayer(AnimationData,spriteX,spriteY);
player.setAnimation(this.animation_Id);
player.setLoopOffset(loopOffset);
} catch (Exception e) {
e.printStackTrace();
}
}
public void run(){//逻辑
player.update();
}
public int getAnimation(){//得到当前动画
return player.getAnimation();
}
public int getCurrentFrame(){//得到当前动画桢
return player.getCurrentFrame();
}
public boolean end(){//是否结束
return (player.getCurrentFrame()==(player.getFrameCount()-1));
}
public void paint(Graphics g){//绘制
g.setClip(0, 0, Gamedata.width, Gamedata.height);
player.drawFrame(g);
}
}
简单的动画就可以用他来生成一个.比如
startup_Flash=new Simple_Animation(this,”/anu/startup/pupastartup.anu”,0, 88, 190,false,Simple_Animation.loop_Once);
第一个参数是把CANVAS画布.第二个是用motionwelder生成的anu文件.第三个表示动画中的第几个(因为我的动画有好几个).第四,五个是坐标.第六个表示此动画要不要旋转.第7个是只播放一次.
第二种动画是implements MSprite实现的.
下面是我RPG游戏中一个实例
package pupaClan;
//战斗怪类
import javax.microedition.lcdui.Graphics;
import com.studio.motionwelder.MPlayer;
import com.studio.motionwelder.MSprite;
import com.studio.motionwelder.MSpriteAnimationPlayer;
import com.studio.motionwelder.MSpriteData;
import com.studio.motionwelder.MSpriteLoader;
import mgo.common.Gamedata;
import mgo.common.Obj;
import mgo.common.Timer;
import mgo.common.Tools;
import mgo.common.MediaPlayer;
public class Monster extends Obj implements MSprite{
public pupaClan_canvas canvas;
/***Direction***/
public static final byte DIR_RIGHT = 0;
public static final byte DIR_LEFT = 1;
/** Sprite */
public MPlayer player;
private MSpriteData spriteData;
public int hp,max_hp;
public int attack;
public int recovery;
public int exp;
public int coin;
public int level;
public String name;
//密锋动画初始化X偏移量
public final static int Bee_Animation_OPP_X=18;
//密锋动画初始化Y最大偏移量
// public final static int Bee_Animation_MAX_OPP_Y=39;
//蜘蛛动画初始化X偏移量
public final static int Spider_Animation_OPP_X=14;
//蜘蛛动画初始化Y最大偏移量
// public final static int Spider_Animation_MAX_OPP_Y=25;
//兔子动画初始化X偏移量
public final static int Coney_Animation_OPP_X=12;
//兔子动画初始化Y最大偏移量
// public final static int Coney_Animation_MAX_OPP_Y=24;
//野鹿动画初始化X偏移量
public final static int Deer_Animation_OPP_X=14;
//野鹿动画初始化Y最大偏移量
// public final static int Deer_Animation_MAX_OPP_Y=38;
//毒蜘蛛动画初始化X偏移量
public final static int ToxinSpider_Animation_OPP_X=21;
//毒蜘蛛动画初始化Y最大偏移量
// public final static int ToxinSpider_Animation_MAX_OPP_Y=49;
//灰鹿动画初始化X偏移量
public final static int BlackDeer_Animation_OPP_X=16;
//灰鹿动画初始化Y最大偏移量
// public final static int BlackDeer_Animation_MAX_OPP_Y=51;
//蛇动画初始化X偏移量
public final static int Snake_Animation_OPP_X=16;
//蛇动画初始化Y最大偏移量
// public final static int Snake_Animation_MAX_OPP_Y=28;
//野狼动画初始化X偏移量
public final static int Wolf_Animation_OPP_X=23;
//野狼动画初始化Y最大偏移量
// public final static int Wolf_Animation_MAX_OPP_Y=28;
//鹰动画初始化X偏移量
// public final static int Eagle_Animation_OPP_X=14;
//鹰动画初始化Y最大偏移量
// public final static int Eagle_Animation_MAX_OPP_Y=40;
//食人花初始化X偏移量
public final static int Flower_Animation_OPP_X=17;
//食人花初始化Y最大偏移量
// public final static int Flower_Animation_MAX_OPP_Y=40;
//穿山甲初始化X偏移量
public final static int Pangolin_Animation_OPP_X=29;
//穿山甲初始化Y最大偏移量
// public final static int Pangolin_Animation_MAX_OPP_Y=23;
//树怪初始化X偏移量
//public final static int TreeMonster_Animation_OPP_X=19;
//树怪初始化Y最大偏移量
// public final static int TreeMonster_Animation_MAX_OPP_Y=38;
//雕初始化X偏移量
public final static int Vulture_Animation_OPP_X=25;
//雕初始化Y最大偏移量
// public final static int Vulture_Animation_MAX_OPP_Y=54;
//霸王花初始化X偏移量
public final static int OverloadFlower_Animation_OPP_X=22;
//霸王花初始化Y最大偏移量
// public final static int OverloadFlower_Animation_MAX_OPP_Y=45;
//眼镜蛇王初始化X偏移量
public final static int Cobra_Animation_OPP_X=21;
//眼镜蛇王初始化Y最大偏移量
// public final static int Cobra_Animation_MAX_OPP_Y=34;
//千年树妖初始化X偏移量
//public final static int KiloTreeMonster_Animation_OPP_X=19;
//千年树妖初始化Y最大偏移量
// public final static int KiloTreeMonster_Animation_MAX_OPP_Y=51;
//血狼初始化X偏移量
public final static int BloodWolf_Animation_OPP_X=25;
//血狼初始化Y最大偏移量
// public final static int BloodWolf_Animation_MAX_OPP_Y=33;
//人熊初始化X偏移量
public final static int Bear_Animation_OPP_X=27;
//人熊初始化Y最大偏移量
// public final static int Bear_Animation_MAX_OPP_Y=65;
//大狼初始化X偏移量
public final static int BigWolf_Animation_OPP_X=17;
//大狼初始化Y最大偏移量
// public final static int BigWolf_Animation_MAX_OPP_Y=48;
//剑齿虎初始化X偏移量
public final static int Tiger_Animation_OPP_X=43;
//剑齿虎初始化Y最大偏移量
// public final static int Tiger_Animation_MAX_OPP_Y=51;
/** Animations */
public final static byte MON_SLEEP=0;//站着不动
public final static byte MON_KILL1=1;//普通攻击
public final static byte MON_INJURED1=2;//被攻击1,黄色闪光(小)
public final static byte MON_DIE=3;//死亡
public final static byte MON_KILL2=4;//非普通攻击,BOSS用
public final static byte MON_KILL3=5;//非普通攻击,BOSS大狼用
private int animation;
public boolean 怪物操作;
public Timer timer=new Timer();
public Monster(pupaClan_canvas canvas,byte type,int spriteX,int spriteY){
try{
this.canvas=canvas;
this.type=type;
String path = null;
int Animation_OPP_X = 0;
switch(this.type){
case 蜜蜂:
setLevel(Tools.getRand(1,3));
Animation_OPP_X=Bee_Animation_OPP_X;
path=”/anu/monster/Bee.anu”;
name=”蜜蜂”;
break;
case 蜘蛛:
setLevel(Tools.getRand(1,3));
Animation_OPP_X=Spider_Animation_OPP_X;
path=”/anu/monster/Spider.anu”;
name=”蜘蛛”;
break;
case 兔子:
setLevel(Tools.getRand(3,7));
Animation_OPP_X=Coney_Animation_OPP_X;
path=”/anu/monster/Coney.anu”;
name=”兔子”;
break;
case 野鹿:
setLevel(Tools.getRand(5,10));
Animation_OPP_X=Deer_Animation_OPP_X;
path=”/anu/monster/Deer.anu”;
name=”野鹿”;
break;
case 灰兔:
setLevel(Tools.getRand(10,13));
Animation_OPP_X=Coney_Animation_OPP_X;
path=”/anu/monster/hui-Coney.anu”;
name=”灰兔”;
break;
case 毒蜘蛛:
setLevel(Tools.getRand(11,15));
Animation_OPP_X=ToxinSpider_Animation_OPP_X;
path=”/anu/monster/ToxinSpider.anu”;
name=”毒蜘蛛”;
break;
case 蜂王:
setLevel(Tools.getRand(15,20));
Animation_OPP_X=Bee_Animation_OPP_X;
path=”/anu/monster/king-Bee.anu”;
name=”蜂王”;
break;
case 灰鹿:
setLevel(Tools.getRand(18,22));
Animation_OPP_X=BlackDeer_Animation_OPP_X;
path=”/anu/monster/BlackDeer.anu”;
name=”灰鹿”;
break;
case 蛇:
setLevel(Tools.getRand(20,25));
Animation_OPP_X=Snake_Animation_OPP_X;
path=”/anu/monster/Snake.anu”;
name=”蛇”;
break;
case 野狼:
setLevel(Tools.getRand(22,25));
Animation_OPP_X=Wolf_Animation_OPP_X;
path=”/anu/monster/Wolf.anu”;
name=”野狼”;
break;
case 青狼:
setLevel(Tools.getRand(38,40));
Animation_OPP_X=Wolf_Animation_OPP_X;
path=”/anu/monster/Wolf1.anu”;
name=”青狼”;
break;
case 黑鹿:
setLevel(Tools.getRand(25,28));
Animation_OPP_X=BlackDeer_Animation_OPP_X;
path=”/anu/monster/HaDeer.anu”;
name=”黑鹿”;
break;
case 食人花:
setLevel(Tools.getRand(28,32));
Animation_OPP_X=Flower_Animation_OPP_X;
path=”/anu/monster/Flower.anu”;
name=”食人花”;
break;
case 穿山甲:
setLevel(Tools.getRand(30,35));
Animation_OPP_X=Pangolin_Animation_OPP_X;
path=”/anu/monster/Pangolin.anu”;
name=”穿山甲”;
break;
case 穿山甲王:
setLevel(Tools.getRand(43,46));
Animation_OPP_X=Pangolin_Animation_OPP_X;
path=”/anu/monster/Pangolin1.anu”;
name=”穿山甲王”;
break;
case 雕:
setLevel(Tools.getRand(35,40));
Animation_OPP_X=Vulture_Animation_OPP_X;
path=”/anu/monster/Vulture.anu”;
name=”雕”;
break;
case 霸王花:
setLevel(Tools.getRand(40,45));
Animation_OPP_X=OverloadFlower_Animation_OPP_X;
path=”/anu/monster/OverloadFlower.anu”;
name=”霸王花”;
break;
case 眼镜蛇王:
setLevel(Tools.getRand(42,47));
Animation_OPP_X=Cobra_Animation_OPP_X;
path=”/anu/monster/Cobra.anu”;
name=”眼镜蛇王”;
break;
case 血狼:
setLevel(Tools.getRand(45,50));
Animation_OPP_X=BloodWolf_Animation_OPP_X;
path=”/anu/monster/BloodWolf.anu”;
name=”血狼”;
break;
case 人熊:
hp=max_hp=480;attack=95;recovery=50;exp=632;coin=500;
Animation_OPP_X=Bear_Animation_OPP_X;
path=”/anu/monster/Bear.anu”;
name=”人熊”;
break;
case 大狼:
hp=max_hp=850;attack=208;recovery=108;exp=2571;coin=1280;
Animation_OPP_X=BigWolf_Animation_OPP_X;
path=”/anu/monster/BigWolf.anu”;
name=”大狼”;
break;
case 剑齿虎:
hp=max_hp=1120;attack=309;recovery=160;exp=4720;coin=2000;
Animation_OPP_X=Tiger_Animation_OPP_X;
path=”/anu/monster/Tiger.anu”;
name=”剑齿虎”;
break;
}
this.spriteX=Animation_OPP_X+spriteX;
this.spriteY=spriteY;
spriteData=MSpriteLoader.loadMSprite(path,false,ResourceLoader.getInstance());
player = new MSpriteAnimationPlayer(spriteData,this);
setAnimation(MON_SLEEP);
direction = DIR_RIGHT;
}catch (Exception e){
e.printStackTrace();
}
}
public void run(){
if(Obj.isMonsterBoss(this.type)){//BOSS
switch(this.type){
case Obj.人熊:
case Obj.剑齿虎:
switch (animation) {
case MON_SLEEP:
if(canvas.battle_hero.主角操作完成 & timer.arrive_Time(canvas.battle_hero.延迟时间)){
if(hp<(max_hp>>1)){//自身生命少于一半
setAnimation(Tools.getOnlyRand(MON_KILL1, MON_KILL2));
}else{
setAnimation(MON_KILL1);
}
}
break;
case MON_KILL1:
if(!timer.arrive_Time(canvas.battle_hero.延迟时间))return;
if(getCurrentFrame()==5)canvas.battle_hero.setAnimation(BattleHero.HERO_INJURED1);
break;
case MON_KILL2:
if(!timer.arrive_Time(canvas.battle_hero.延迟时间))return;
if(getCurrentFrame()==6)canvas.battle_hero.setAnimation(BattleHero.HERO_INJURED1);
break;
}
break;
case Obj.大狼:
switch (animation) {
case MON_SLEEP:
if(canvas.battle_hero.主角操作完成 & timer.arrive_Time(canvas.battle_hero.延迟时间)){
if(hp<(max_hp>>1)){//自身生命少于一半
setAnimation(Tools.getOnlyRand(MON_KILL1, MON_KILL2, MON_KILL3));
}else{
setAnimation(MON_KILL1);
}
}
break;
case MON_KILL1:
if(!timer.arrive_Time(canvas.battle_hero.延迟时间))return;
if(getCurrentFrame()==5)canvas.battle_hero.setAnimation(BattleHero.HERO_INJURED1);
break;
case MON_KILL2:
case MON_KILL3:
if(!timer.arrive_Time(canvas.battle_hero.延迟时间))return;
if(getCurrentFrame()==5)canvas.battle_hero.setAnimation(BattleHero.HERO_INJURED1);
break;
}
break;
}
}else{//小怪
switch (animation){
case MON_SLEEP:
if(canvas.battle_hero.主角操作完成 & timer.arrive_Time(canvas.battle_hero.延迟时间))setAnimation(MON_KILL1);
break;
case MON_KILL1:
if(!timer.arrive_Time(canvas.battle_hero.延迟时间))return;
if(getCurrentFrame()==4)canvas.battle_hero.setAnimation(BattleHero.HERO_INJURED1);
break;
}
}
player.update();
}
public void endOfAnimation(){
switch (animation){
case MON_KILL1:
case MON_KILL2:
case MON_KILL3:
setAnimation(MON_SLEEP);
canvas.battle_hero.主角操作完成=false;
break;
case MON_INJURED1://普通攻击
check_Die(canvas.common_hero.attack+(canvas.返回主角身上装备(Equip.攻击装备)!=null?((Equip)canvas.返回主角身上装备(Equip.攻击装备)).getAttack():0)-recovery);
break;
case MON_DIE:
if(!canvas.battle_Complete){
canvas.mediaPlayer.playSound(“/sound/battlesuccess.mid”, MediaPlayer.play_Once);//播放音乐
checkTaskFromBattle();//更新任务
/****增加主角经验,金币,检测主角是否升级****/
canvas.common_hero.coin=canvas.common_hero.coin+coin;
canvas.common_hero.exp=canvas.common_hero.exp+exp;
canvas.hero_IsUpgrade=canvas.common_hero.checkLevel();
canvas.battle_Complete=true;
canvas.cursor_y=0;
canvas.backup_time=System.currentTimeMillis();
canvas.timer.init_Time();
}
break;
}
}
private void check_Die(int injure){//根据injure值检测怪物是否死亡
if(injure<0)injure=0;
hp=hp-injure;
if(hp<0)hp=0;
if(hp>0){//怪没有死
if(Obj.isMonsterBoss(this.type)){//BOSS
switch(this.type){
case Obj.人熊:
case Obj.剑齿虎:
if(hp<(max_hp>>1)){//自身生命少于一半
setAnimation(Tools.getOnlyRand(MON_KILL1, MON_KILL2));
}else{
setAnimation(MON_KILL1);
}
canvas.主角操作完毕并设置延迟时间(700l);
break;
case Obj.大狼:
if(hp<(max_hp>>1)){//自身生命少于一半
setAnimation(Tools.getOnlyRand(MON_KILL1, MON_KILL2, MON_KILL3));
}else{
setAnimation(MON_KILL1);
}
canvas.主角操作完毕并设置延迟时间(700l);
break;
}
}else{//小怪
setAnimation(MON_KILL1);
canvas.主角操作完毕并设置延迟时间(700l);
}
}else setAnimation(MON_DIE);//怪死亡了
}
public void paint(Graphics g){//绘制
g.setClip(0, 0, Gamedata.width, Gamedata.height);
player.drawFrame(g);
}
public int getSpriteDrawX(){
return getSpriteX();
}
public int getSpriteDrawY(){
return getSpriteY();
}
byte orientation;
public byte getSpriteOrientation(){
return (byte)direction;
}
public void updateSpritePosition(int incX,int incY){
spriteX+=incX;
spriteY+=incY;
}
public boolean end(){
return (player.getCurrentFrame()==(player.getFrameCount()-1));
}
public int getAnimation(){
return player.getAnimation();
}
public int getCurrentFrame(){
return player.getCurrentFrame();
}
public void setAnimation(int animation){
switch (animation) {
case MON_SLEEP:
player.setAnimation(MON_SLEEP);
player.setLoopOffset(0);
break;
default:
player.setAnimation(animation);
player.setLoopOffset(-1);
break;
}
this.animation = animation;
}
public void setLevel(int level){//设置怪物级别
this.level=level;
switch(this.level){
case 1:
hp=max_hp=20;attack=5;recovery=2;exp=Tools.getRand(8,10);coin=Tools.getRand(1,10);
break;
case 2:
hp=max_hp=23;attack=6;recovery=3;exp=Tools.getRand(8,10);coin=Tools.getRand(1,10);
break;
case 3:
hp=max_hp=26;attack=8;recovery=4;exp=Tools.getRand(8,10);coin=Tools.getRand(1,10);
break;
case 4:
hp=max_hp=30;attack=9;recovery=4;exp=Tools.getRand(8,10);coin=Tools.getRand(1,10);
break;
case 5:
hp=max_hp=34;attack=11;recovery=5;exp=Tools.getRand(8,10);coin=Tools.getRand(1,10);
break;
case 6:
hp=max_hp=39;attack=13;recovery=6;exp=Tools.getRand(34,40);coin=Tools.getRand(14,40);
break;
case 7:
hp=max_hp=44;attack=15;recovery=7;exp=Tools.getRand(34,40);coin=Tools.getRand(14,40);
break;
case 8:
hp=max_hp=50;attack=18;recovery=9;exp=Tools.getRand(34,40);coin=Tools.getRand(14,40);
break;
case 9:
hp=max_hp=56;attack=20;recovery=10;exp=Tools.getRand(34,40);coin=Tools.getRand(14,40);
break;
case 10:
hp=max_hp=63;attack=23;recovery=11;exp=Tools.getRand(34,40);coin=Tools.getRand(14,40);
break;
case 11:
hp=max_hp=70;attack=26;recovery=13;exp=Tools.getRand(94,110);coin=Tools.getRand(48,90);
break;
case 12:
hp=max_hp=78;attack=29;recovery=14;exp=Tools.getRand(94,110);coin=Tools.getRand(48,90);
break;
case 13:
hp=max_hp=86;attack=32;recovery=16;exp=Tools.getRand(94,110);coin=Tools.getRand(48,90);
break;
case 14:
hp=max_hp=95;attack=36;recovery=18;exp=Tools.getRand(94,110);coin=Tools.getRand(48,90);
break;
case 15:
hp=max_hp=104;attack=40;recovery=20;exp=Tools.getRand(94,110);coin=Tools.getRand(48,90);
break;
case 16:
hp=max_hp=113;attack=44;recovery=22;exp=Tools.getRand(171,200);coin=Tools.getRand(102,160);
break;
case 17:
hp=max_hp=123;attack=48;recovery=24;exp=Tools.getRand(171,200);coin=Tools.getRand(102,160);
break;
case 18:
hp=max_hp=134;attack=52;recovery=26;exp=Tools.getRand(171,200);coin=Tools.getRand(102,160);
break;
case 19:
hp=max_hp=144;attack=57;recovery=28;exp=Tools.getRand(171,200);coin=Tools.getRand(102,160);
break;
case 20:
hp=max_hp=156;attack=62;recovery=31;exp=Tools.getRand(171,200);coin=Tools.getRand(102,160);
break;
case 21:
hp=max_hp=168;attack=67;recovery=33;exp=Tools.getRand(300,350);coin=Tools.getRand(176,250);
break;
case 22:
hp=max_hp=180;attack=72;recovery=36;exp=Tools.getRand(300,350);coin=Tools.getRand(176,250);
break;
case 23:
hp=max_hp=193;attack=77;recovery=38;exp=Tools.getRand(300,350);coin=Tools.getRand(176,250);
break;
case 24:
hp=max_hp=206;attack=83;recovery=41;exp=Tools.getRand(300,350);coin=Tools.getRand(176,250);
break;
case 25:
hp=max_hp=220;attack=89;recovery=44;exp=Tools.getRand(300,350);coin=Tools.getRand(176,250);
break;
case 26:
hp=max_hp=234;attack=95;recovery=47;exp=Tools.getRand(462,540);coin=Tools.getRand(270,360);
break;
case 27:
hp=max_hp=248;attack=101;recovery=50;exp=Tools.getRand(462,540);coin=Tools.getRand(270,360);
break;
case 28:
hp=max_hp=263;attack=107;recovery=53;exp=Tools.getRand(462,540);coin=Tools.getRand(270,360);
break;
case 29:
hp=max_hp=279;attack=114;recovery=57;exp=Tools.getRand(462,540);coin=Tools.getRand(270,360);
break;
case 30:
hp=max_hp=295;attack=120;recovery=60;exp=Tools.getRand(462,540);coin=Tools.getRand(270,360);
break;
case 31:
hp=max_hp=311;attack=127;recovery=63;exp=Tools.getRand(651,760);coin=Tools.getRand(384,490);
break;
case 32:
hp=max_hp=328;attack=135;recovery=67;exp=Tools.getRand(651,760);coin=Tools.getRand(384,490);
break;
case 33:
hp=max_hp=346;attack=142;recovery=71;exp=Tools.getRand(651,760);coin=Tools.getRand(384,490);
break;
case 34:
hp=max_hp=363;attack=149;recovery=74;exp=Tools.getRand(651,760);coin=Tools.getRand(384,490);
break;
case 35:
hp=max_hp=382;attack=157;recovery=78;exp=Tools.getRand(651,760);coin=Tools.getRand(384,490);
break;
case 36:
hp=max_hp=401;attack=165;recovery=82;exp=Tools.getRand(857,1000);coin=Tools.getRand(518,640);
break;
case 37:
hp=max_hp=420;attack=173;recovery=86;exp=Tools.getRand(857,1000);coin=Tools.getRand(518,640);
break;
case 38:
hp=max_hp=440;attack=182;recovery=91;exp=Tools.getRand(857,1000);coin=Tools.getRand(518,640);
break;
case 39:
hp=max_hp=460;attack=190;recovery=95;exp=Tools.getRand(857,1000);coin=Tools.getRand(518,640);
break;
case 40:
hp=max_hp=480;attack=199;recovery=99;exp=Tools.getRand(857,1000);coin=Tools.getRand(518,640);
break;
case 41:
hp=max_hp=501;attack=208;recovery=104;exp=Tools.getRand(1114,1300);coin=Tools.getRand(672,810);
break;
case 42:
hp=max_hp=523;attack=217;recovery=108;exp=Tools.getRand(1114,1300);coin=Tools.getRand(672,810);
break;
case 43:
hp=max_hp=545;attack=227;recovery=113;exp=Tools.getRand(11114,1300);coin=Tools.getRand(672,810);
break;
case 44:
hp=max_hp=567;attack=236;recovery=118;exp=Tools.getRand(11114,1300);coin=Tools.getRand(672,810);
break;
case 45:
hp=max_hp=590;attack=246;recovery=123;exp=Tools.getRand(11114,1300);coin=Tools.getRand(672,810);
break;
case 46:
hp=max_hp=614;attack=256;recovery=128;exp=Tools.getRand(1285,1500);coin=Tools.getRand(846,1000);
break;
case 47:
hp=max_hp=638;attack=266;recovery=133;exp=Tools.getRand(1285,1500);coin=Tools.getRand(846,1000);
break;
case 48:
hp=max_hp=662;attack=276;recovery=138;exp=Tools.getRand(1285,1500);coin=Tools.getRand(846,1000);
break;
case 49:
hp=max_hp=687;attack=287;recovery=143;exp=Tools.getRand(1285,1500);coin=Tools.getRand(846,1000);
break;
case 50:
hp=max_hp=712;attack=298;recovery=149;exp=Tools.getRand(1285,1500);coin=Tools.getRand(846,1000);
break;
}
}
public void checkTaskFromBattle(){//战斗胜利,更新任务中各个数量
for(int i=0;i<canvas.taskVector.size();i++){
Task t=(Task) canvas.taskVector.elementAt(i);
if(t.task_Name.equals(Task.task_Name5)&this.type==Obj.蜜蜂){
if(canvas.common_hero.杀死蜜蜂数量<20)canvas.common_hero.杀死蜜蜂数量++;
break;
}
if(t.task_Name.equals(Task.task_Name6)&this.type==Obj.毒蜘蛛){
if(canvas.common_hero.杀死毒蜘蛛数量<30)canvas.common_hero.杀死毒蜘蛛数量++;
break;
}
if(t.task_Name.equals(Task.task_Name7)&this.type==Obj.食人花){
if(canvas.common_hero.杀死食人花数量<30)canvas.common_hero.杀死食人花数量++;
break;
}
if(t.task_Name.equals(Task.task_Name8)){
switch(this.type){
case Obj.霸王花:
if(canvas.common_hero.杀死霸王花数量<10)canvas.common_hero.杀死霸王花数量++;
break;
case Obj.眼镜蛇王:
if(canvas.common_hero.杀死眼镜蛇王数量<10)canvas.common_hero.杀死眼镜蛇王数量++;
break;
case Obj.穿山甲王:
if(canvas.common_hero.杀死穿山甲王数量<10)canvas.common_hero.杀死穿山甲王数量++;
break;
case Obj.血狼:
if(canvas.common_hero.杀死血狼数量<10)canvas.common_hero.杀死血狼数量++;
break;
}
break;
}
}
}
}
此类是怪的行为类.
endOfAnimation()在一个动画结束时会调用.
updateSpritePosition()是更新坐标.检测
getSpriteOrientation()得到方向
setAnimation()设置新的动画
end()检查是否播放结束
getSpriteDrawX()得到绘制X.
getSpriteDrawY()得到绘制Y.
无论用哪种方式.都要自己实现ResourceLoader类
ResourceLoader类就是你的动画需要指定创建哪些图片资源
有loadImage和loadImageClip二种方法
最近评论