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 ...
随机推荐
- .net网站报错:对象的当前状态使该操作无效
微软在2011年12月29号发布的2011年最后一个更新让哥哥为程序出现的异常头痛了一天. 这个异常在页面数据量小的时候并不会触发,只在页面数据量大的情况下才会出现,开始解决起来让人无从下手,最后才发 ...
- C++随机崩溃捕捉处理
1. 会引起异常的几个原因(主要记录目前遇到过的几个问题) 程序读取了无效的内存地址 堆栈的溢出,比如无限循环导致那段内存溢出,比如把size为20的缓存拷贝到size为10的缓存块等 无法申请到有效 ...
- JPA 系列教程8-双向一对一共享主键
双向一对一共享主键的ddl语句 CREATE TABLE `t_person` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(25 ...
- Spring Boot 系列教程7-EasyUI-datagrid
jQueryEasyUI jQuery EasyUI是一组基于jQuery的UI插件集合体,而jQuery EasyUI的目标就是帮助web开发者更轻松的打造出功能丰富并且美观的UI界面.开发者不需要 ...
- Django - 模型表单(创建、更新、删除)
urls.py # /music/alubm/add/ url(r'^album/add/$', views.AlbumCreate.as_view(), name="album-add&q ...
- java文件处理之压缩,分割
http://blog.csdn.net/ycg01/article/details/1366648 java文件处理之压缩,分割 标签: javaexceptionimportnullbytefil ...
- 判断iPhone/android手机
JS判断请求来自Android手机还是iPhone手机,根据不同的手机跳转到不同的链接. var browser = {versions: function () {var u = navigator ...
- table固定宽度高度, 及overflow省略号
整体设置标签为:td {text-overflow: ellipsis; white-space: nowrap; overflow: hidden; } table fix设置 <table ...
- 洛谷U4727 小L 的二叉树
U4727 小L 的二叉树 题目背景 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣. 所以,小L当时卡在了二叉树. 题目描述 在计算机科学中,二叉树 ...
- 1107: 单向公路(bfs+输入整理)(DFS也可以,而且更快)
Description 某个地区有许多城镇,但并不是每个城镇都跟其他城镇有公路连接,且有公路的并不都能双向行驶.现在我们把这些城镇间的公路分布及允许的行驶方向告诉你,你需要编程解决通过公路是否可以从一 ...