使用Quick-Cocos2d-x搭建一个横版过关游戏(四)拷来个进度条类,

但是由于那个类有个bug,在setProgress里面self.fill是找不到的,所以我改进了一下,代码如下:

 local Progress = class("Progress", function()
-- body
return display.newNode()
end) function Progress:ctor(background, fill)
local progress = display.newSprite(background)
local fill = display.newProgressTimer(fill, display.PROGRESS_TIMER_BAR)
fill:setMidpoint(CCPoint(,0.5))
fill:setBarChangeRate(CCPoint(1.0,))
fill:setPosition(progress:getContentSize().width*0.5, progress:getContentSize().height*0.5)
progress:addChild(fill)
progress:scale(0.5)
fill:setPercentage()
self.fill = fill
self:addChild(progress)
end function Progress:setProgress(progress)
-- body
self.fill:setPercentage(progress)
end return Progress

PS:其实还有一种解决办法,如下:

 local Progress = class("Progress", function( background, fill )
-- body
local progress = display.newSprite(background)
local fill = display.newProgressTimer(fill, display.PROGRESS_TIMER_BAR)
fill:setMidpoint(CCPoint(,0.5))
fill:setBarChangeRate(CCPoint(1.0,))
fill:setPosition(progress:getContentSize().width*0.5, progress:getContentSize().height*0.5)
progress:addChild(fill)
progress:scale(0.5)
fill:setPercentage()
progress.fill = fill
return progress
end)

然后就是新增了一个角色的场景显示类GameUnit,暂时只用作角色显示,后续有功能再加,代码如下:

 local GameUnit = class("GameUnit", function()
-- body
return display.newNode()
end) local Progress = import("app.views.Progress") function GameUnit:ctor(hero)
-- body
local clas = hero.class
cc.EventProxy.new(hero, self)
:addEventListener(clas.CHANGE_STATE_EVENT, handler(self, self.onStateChange))
:addEventListener(clas.KILL_EVENT, handler(self, self.onKilled))
:addEventListener(clas.HP_CHANGED_EVENT, handler(self, self.onHpChanged))
:addEventListener(clas.EXP_CHANGED_EVENT, handler(self, self.onExpChanged)) self.player = hero
self:initDisplay()
end function GameUnit:onStateChange( event )
-- body
end function GameUnit:onKilled( event)
-- body
end function GameUnit:onHpChanged( event )
-- body
end function GameUnit:onExpChanged( event )
-- body
end --初始化显示
function GameUnit:initDisplay()
-- 角色外观
local shape
if self.player ~= nil then
--todo
shape = CCArmature:create(self.player:getRes())
local animation = shape:getAnimation()
animation:setSpeedScale(0.4)
animation:play("anim_idle")
self:setPosition(self.player:getX(), self.player:getY())
self:setScaleX(self.player:getDirection())
else
shape = display.newSprite("defaultimage.png")
end
self:addChild(shape)
self.shape = shape --角色血条
self.hpbar = Progress.new("progres_bg.png","progress.png")
self:addChild(self.hpbar)
self.hpbar:setProgress()
end
--传入|更新数据
function GameUnit:setData()
-- body
end
--取得数据
function GameUnit:getData()
return self.hero
end
--添加事件:重复利用这个对象的时候会用到
function GameUnit:addEvents()
-- body
end
--移除事件:重复利用这个对象的时候会用到
function GameUnit:removeEvents()
-- body
end return GameUnit

GameUnit里面包含了一个显示游戏角色形象的Sprite和一个显示血条的Progress,我们可以根据情况选择是否对外公开更新显示的接口。

现在,我们游戏角色的状态变更相关逻辑都在这里处理就行了。

所以,我们可以这样子初始化角色显示对象:

     local attacker = app:getObject("me")
local attackerSp = GameUnit.new(attacker)
self.layer:addChild(attackerSp) local enemy = app:getObject("enemy")
local attackerSp1 = GameUnit.new(enemy)
self.layer:addChild(attackerSp1)

以下是现在的效果图:

下一步需要完善的是游戏角色类根据起对应的行为改变更新显示。

Quick Cocos2dx 场景对象基类实现的更多相关文章

  1. winform中利用反射实现泛型数据访问对象基类(1)

    考虑到软件使用在客户端,同时想简化代码的实现,就写了一个泛型的数据访问对象基类,并不是特别健全,按道理应该参数化的方式实现insert和update,暂未使用参数化,抽时间改进. /// <su ...

  2. ios中解析json对象基类

    这个是对上面一篇写的一个解析json对象的基类 @interface BaseObjectFromJson : NSObject + (id) objectWithDict:(NSDictionary ...

  3. winform中利用反射实现泛型数据访问对象基类(3)

    继续完善了几点代码 满足没有主键的情况下使用 并且完善实体字段反射设置value时的类型转换 /// <summary> /// DAO基类 实体名必须要与数据表字段名一致 /// < ...

  4. winform中利用反射实现泛型数据访问对象基类(2)

    在1的基础上做了一点改进 参数化处理 看上去更简洁 无主键情况下 update 方法需要改进 insert delete没有问题  /// <summary>     /// DAO基类 ...

  5. Quick Cocos2dx 场景转换问题

    项目结构是这样子的: 主场景代码是这样子的: local MainScene = class("MainScene", function() return display.newS ...

  6. cocos2d-x 扩充引擎基类功能 引起的头文件重复包含问题的分析

    c++ 头文件包含 原因的分析:   c++  头文件的循环引用是指: .h 里面的里面的头文件的相互包含的,引起的重复引用的问题.cpp 里面包含头文件是不存在重复引用的问题(因为CPP没有#ifn ...

  7. iOS控制器之基类设计

    题记 在进入新公司后.经过这一个月的重构项目,终于把项目做到了个人相对满意的程度(还有一种不满意的叫老板的需求,提过多次意见也没用= =!).在这次重构中按照以前的思路设计出了个人觉得比较适用的一个基 ...

  8. C++基类和派生类之间的转换

    本文讲解内容的前提是派生类继承基类的方式是公有继承,关键字public 以下程序为讲解用例. #include<iostream> using namespace std; class A ...

  9. cocos2d-x 的两大基类

    cocos2d-x 有两个重要的基类,一个管理引用计数的 Ref,别一个则定义许多基本属性的 Node. 在 cocos2d-x 中的基本概念 说到 create 函数的时候提到 cocos2d-x ...

随机推荐

  1. load

    http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages http://blog.scoutapp.com/ar ...

  2. Server的Transfer和Response的Redirect

    在实现页面跳转的时候,有些人喜欢用Response.Redirect,而有些人则喜欢用Server.Transfer.大部分时间似乎这两种方法都可以实现相同的功能,那究竟有区别吗? 查了些文档,发现两 ...

  3. OpenLayers 3 的地图基本操作

    <body> <div id="map"> <div id="menu"> <button id="zoom ...

  4. docker的一些常用命令整理

    docker清除命令: 杀掉所有容器:docker kill $(docker ps -q) ; 清除所有容器:docker rm $(docker ps -a -q) ; 清除所有镜像:docker ...

  5. CodeForces 719B Anatoly and Cockroaches 思维锻炼题

    题目大意:有一排蟑螂,只有r和b两种颜色,你可以交换任意两只蟑螂的位置,或涂改一个蟑螂的颜色,使其变成r和b交互排列的形式.问做少的操作次数. 题目思路:更改后的队列只有两种形式:长度为n以r开头:长 ...

  6. Learning Java IO indexes

    I/O Streams, it simplifies I/O operations, write a whole object out to stream & read back. File ...

  7. 什么是dtd文件,为什么需要

    DTD为英文Document Type Definition,中文意思为“文档类定义”.DTD肩负着两重任务:一方面它帮助你编写合法的代码,另一方面它让浏览器正确地显示器代码.也许你会问它们居然有这样 ...

  8. 最短路径算法——Dijkstra算法

    在路由选择算法中都要用到求最短路径算法.最出名的求最短路径算法有两个,即Bellman-Ford算法和Dijkstra算法.这两种算法的思路不同,但得出的结果是相同的. 下面只介绍Dijkstra算法 ...

  9. android 图片拍照图片旋转的处理方式

    第一种:String str=path; /** * 读取图片属性:旋转的角度 * * @param path * 图片绝对路径 * @return degree旋转的角度 */ private vo ...

  10. C#中:函数访问级别对函数形参访问级别的约束

    Inconsistent accessibility: parameter type 'Program.CommandLineInfo' is less accessible than method ...