Quick Cocos2dx 场景对象基类实现
从使用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 场景对象基类实现的更多相关文章
- winform中利用反射实现泛型数据访问对象基类(1)
考虑到软件使用在客户端,同时想简化代码的实现,就写了一个泛型的数据访问对象基类,并不是特别健全,按道理应该参数化的方式实现insert和update,暂未使用参数化,抽时间改进. /// <su ...
- ios中解析json对象基类
这个是对上面一篇写的一个解析json对象的基类 @interface BaseObjectFromJson : NSObject + (id) objectWithDict:(NSDictionary ...
- winform中利用反射实现泛型数据访问对象基类(3)
继续完善了几点代码 满足没有主键的情况下使用 并且完善实体字段反射设置value时的类型转换 /// <summary> /// DAO基类 实体名必须要与数据表字段名一致 /// < ...
- winform中利用反射实现泛型数据访问对象基类(2)
在1的基础上做了一点改进 参数化处理 看上去更简洁 无主键情况下 update 方法需要改进 insert delete没有问题 /// <summary> /// DAO基类 ...
- Quick Cocos2dx 场景转换问题
项目结构是这样子的: 主场景代码是这样子的: local MainScene = class("MainScene", function() return display.newS ...
- cocos2d-x 扩充引擎基类功能 引起的头文件重复包含问题的分析
c++ 头文件包含 原因的分析: c++ 头文件的循环引用是指: .h 里面的里面的头文件的相互包含的,引起的重复引用的问题.cpp 里面包含头文件是不存在重复引用的问题(因为CPP没有#ifn ...
- iOS控制器之基类设计
题记 在进入新公司后.经过这一个月的重构项目,终于把项目做到了个人相对满意的程度(还有一种不满意的叫老板的需求,提过多次意见也没用= =!).在这次重构中按照以前的思路设计出了个人觉得比较适用的一个基 ...
- C++基类和派生类之间的转换
本文讲解内容的前提是派生类继承基类的方式是公有继承,关键字public 以下程序为讲解用例. #include<iostream> using namespace std; class A ...
- cocos2d-x 的两大基类
cocos2d-x 有两个重要的基类,一个管理引用计数的 Ref,别一个则定义许多基本属性的 Node. 在 cocos2d-x 中的基本概念 说到 create 函数的时候提到 cocos2d-x ...
随机推荐
- list组件
<?xml version="1.0"?> <!-- Simple example to demonstrate the Spark List component ...
- mongodb常见问题
1.count统计结果错误 这是由于分布式集群正在迁移数据,它导致count结果值错误,需要使用aggregate pipeline来得到正确统计结果,例如: db.collection.aggreg ...
- android cordova h5总结
最近项目 替换页面 把80%页面替换成h5了. 首页h5页面可以放在android本地.增加访问速度.节省用户流量 把服务器上的 js代码 压缩成zip格式 放在asset目录.当应用安装时候 ...
- JS-日期框、下拉框、全选复选框
<!-- 下拉框 --><link rel="stylesheet" href="static/ace/css/chosen.css" /&g ...
- Spring Boot 系列教程7-EasyUI-datagrid
jQueryEasyUI jQuery EasyUI是一组基于jQuery的UI插件集合体,而jQuery EasyUI的目标就是帮助web开发者更轻松的打造出功能丰富并且美观的UI界面.开发者不需要 ...
- Segments POJ 3304 直线与线段是否相交
题目大意:给出n条线段,问是否存在一条直线,使得n条线段在直线上的投影有至少一个公共点. 题目思路:如果假设成立,那么作该直线的垂线l,该垂线l与所有线段相交,且交点可为线段中的某两个交点 证明:若有 ...
- json的学习笔记
json比较简单,所以先从json开始学起. 一 json的名称: json的全称是javascript object notation,中文名称为js 对象表示法. json的定义:json是一种轻 ...
- cddiv/数组维护
题目连接 看代码: #include <set> #include <map> #include <cmath> #include <queue> #i ...
- CI 框架 hooks 的调用方法
流程:在hooks中写一个类 , 在system/core/CodeIgniter.php 判断什么时候执行 hooks中的类 涉及到了php反射获取类 方法 方法中的注释 ...
- android cts 命令的说明
Host help showthis message 帮助文档 exit exitcts command line 退出CTS ls 全部用l替代,--plan直接用p替代,也即 l p .其他类似 ...