呵呵,图片先来一发:

Quick Cocos2dx 初步战斗

 

最近懒,很懒,连我自己都觉得有点可耻了。

但是实在没有什么东西啊,温水煮青蛙的什么的。

吐槽完成,以上。

 

 

目前完成了简单的战斗部分,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

相关文章: