呵呵,图片先来一发:
最近懒,很懒,连我自己都觉得有点可耻了。
但是实在没有什么东西啊,温水煮青蛙的什么的。
吐槽完成,以上。
目前完成了简单的战斗部分,AI还需要抽出来。
然后突然之间想到手游的帧频是60fps/s,然后就放弃了之前比较平滑的CCMoveTo,换成了每帧去计算坐标。
还增加了掉血计算与表现,与死亡逻辑处理。
虽然处理得不是很干净,但是这个是后续需要优化的部分。
本次的主要用到的知识点:
framework.scheduler
framework.transition
写这篇blog的目的是在于给自己一点动力,能够一步一个脚印去记录自己。
主要更新的代码部分:
GameUnit.lua:增加了死亡逻辑处理
1 local GameUnit = class("GameUnit", function() 2 return display.newNode() 3 end) 4 local scheduler = import("framework.scheduler") 5 local Progress = import("app.views.Progress") 6 7 function GameUnit:ctor(hero) 8 -- body 9 local clas = hero.class 10 cc.EventProxy.new(hero, self) 11 :addEventListener(clas.CHANGE_STATE_EVENT, handler(self, self.onStateChange)) 12 :addEventListener(clas.KILL_EVENT, handler(self, self.onKilled)) 13 :addEventListener(clas.HP_CHANGED_EVENT, handler(self, self.onHpChanged)) 14 :addEventListener(clas.EXP_CHANGED_EVENT, handler(self, self.onExpChanged)) 15 16 self.player = hero 17 self:initDisplay() 18 end 19 20 function GameUnit:onStateChange( event ) 21 self:updateShapeDisplay(self.player:getState()) 22 end 23 24 --更新角色显示{"anim_walk","anim_eat","anim_placeladder","anim_idle","anim_ladderwalk","anim_laddereat","anim_death"} 25 function GameUnit:updateShapeDisplay(state) 26 local animname = "anim_idle" 27 if state == "walking" then 28 animname = "anim_walk" 29 elseif state == "firing" then 30 animname = "anim_eat" 31 elseif state == "dead" then 32 animname = "anim_death" 33 end 34 printInfo("GameUnit state changed to %s playing : %s", state, animname) 35 if self.shape ~= nil then 36 local animation = self.shape:getAnimation() 37 animation:setSpeedScale(0.6) 38 animation:play(animname) 39 self:setPosition(self.player:getX(), self.player:getY()) 40 self:setScaleX(self.player:getDirection()) 41 42 end 43 44 if self.player:isDead() then 45 scheduler.performWithDelayGlobal(handler(self, self.autoRemove), 1.5) 46 end 47 end 48 49 function GameUnit:onKilled( event) 50 -- body 51 end 52 53 function GameUnit:onHpChanged( event ) 54 self.hpbar:setProgress(self.player:getHp()/self.player:getMaxHp() * 100) 55 56 end 57 58 function GameUnit:autoRemove() 59 local action = CCFadeTo:create(1.0, 0.0) 60 transition.execute(self.shape, action, { 61 onComplete = function( ) 62 self:removeSelf() 63 end 64 }) 65 end 66 67 function GameUnit:onExpChanged( event ) 68 -- body 69 end 70 71 --初始化显示 72 function GameUnit:initDisplay() 73 -- 角色外观 74 local shape = CCArmature:create(self.player:getRes()) 75 self.shape = shape 76 self:updateShapeDisplay(self.player:getState()) 77 shape:setAnchorPoint(CCPoint(0.5,0)) 78 self:addChild(shape) 79 80 --角色血条 81 self.hpbar = Progress.new("progres_bg.png","progress.png") 82 self.hpbar:pos(0.5, shape:getContentSize().height) 83 self:addChild(self.hpbar) 84 end 85 --传入|更新数据 86 function GameUnit:setData() 87 -- body 88 end 89 --取得数据 90 function GameUnit:getData() 91 return self.hero 92 end 93 --添加事件:重复利用这个对象的时候会用到 94 function GameUnit:addEvents() 95 -- body 96 end 97 --移除事件:重复利用这个对象的时候会用到 98 function GameUnit:removeEvents() 99 -- body 100 end 101 102 return GameUnit