cocos2d-x开发: 场景实体(entity)管理
来源:未知 责任编辑:责任编辑 发表时间:2015-09-16 20:03 点击:次
公司现在开新项目,主题的框架部分都是我自己在做,不用受到别人的牵制,所以还算是比较的自由,很好发挥. 游戏并不大,所以需要用到的地方并不多.今天花了一些时间写了场景entity管理的部分代码,还没有完全的完善.
p>
p>我的思路是这样的, entity manager提供注册一个update( dt )的帧频回调事件, 在每一次回调的时候都会遍历管理的所有的entity,调用entity的update( dt )帧频回调.何为帧频回调?我解释一下,cocos2d-x在c++那边是可以重写onDraw()方法实现的.在lua这边的话,如果是从cocos2d::node派生的子类,也就是使用 node = class( "node", function() return cc.Node:create() end),然后也可以注册schedulexxxx系列的方法,具体的可以去参考源码.由于我的管理类和entity都不是node派生的,所以我在提供了管理类的update( dt )回调,通过cc.Director:getInstance():getScheduler(),然后调用scheduler:scheduleScripteFunc( function(dt) end,0,false )方式实现的.
p>
p>管理类的源码如下:
p>
p>
p> 1 local entity_manager = class( "entity_manager", nil )
p> 2
p> 3 function entity_manager:ctor()
p> 4 self.entity_list_ = {}
p> 5 self.entity_nums_ = 0
p> 6 end
p> 7
p> 8 function entity_manager:register_entity( entity )
p> 9 if entity == nil then
p>10 return
p>11 end
p>12
p>13 local entity_rd
p>14 entity_rd = self.entity_nums_ + 1
p>15 entity:set_runtime_id( entity_rd )
p>16
p>17 table.insert( self.entity_list_, entity )
p>18 self.entity_nums_ = entity_rd
p>19 end
p>20
p>21 function entity_manager:remove_entity( entity )
p>22 if entity == nil then
p>23 return
p>24 end
p>25
p>26 local entity_rd
p>27 entity_rd = entity:get_runtime_rd()
p>28
p>29 if entity_rd > self.entity_nums_ then
p>30 return
p>31 end
p>32 entity:remove_from_node()
p>33 table.remove( self.entity_list_, entity_rd )
p>34 for index, v_t in ipairs( self.entity_list_ ) do
p>35 if index >= entity_rd then
p>36 v_t:set_runtime_id( index )
p>37 end
p>38 end
p>39 self.entity_nums_ = #self.entity_list_
p>40 end
p>41
p>42 function entity_manager:update( dt )
p>43 for _, v_t in ipairs( self.entity_list_ ) do
p>44 v_t:update( dt )
p>45 end
p>46 end
p>47
p>48 return entity_manager
p>
p>
p>
p>提供一个概念就是runtime entity id, 我们不能保证一个类型只可以创建一个对象,这是不合理的,所以除了entity的uniqure_id之外,就提供了运行时候的id。由于这个运行时候的id是动态的,所以在remove的时候需要更新一下,也就是上面table.remove下面的操作。下面是entity的代码:
相关新闻>>
- Cocos2d-x中 发起http请求
- cocos2d-x-3.3-018-游戏摇杆joystick源码分享
- cocos2dx背景透明处理
- cocos2d-x 3.2 之 别踩白块(第一篇)
- Cocos2d-x回调函数 Lambda表达式
- Cocos2d-x虚拟摇杆控制精灵上下左右运动----之游戏开发《赵云要
- Cocos2d-x 3.2 大富翁游戏项目开发-第七部分 获取角色路径_2
- Cocos2d-x 自定义按钮类控制精灵攻击----之游戏开发《赵云要格斗
- Cocos2d-x 3.2 大富翁游戏项目开发-第七部分 获取角色路径_3
- Cocos2d-x 3.2 大富翁游戏项目开发-第八部分 角色按路径行走
最新推荐更多>>>
- 发表评论
-
- 最新评论 更多>>
您可能感兴趣的文章
- UIViewController的retainCount(Object C)
- cocos2d-x在mac下配置安卓开发环境
- quick-cocos2d-x教程12:实现文本和密码输入界面
- Cocos2d-x3.0游戏实例之《别救我》第八篇——TiledMap实现关卡编
- 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之
- symbian UI开发小结(一)
- 五 手游开发神器 cocos2d-x editor 之贴图(TexturePacker)
- Cocos2d-x3.0 文件处理
- cocos2dx V3.2 mac os Xcode6.1 环境配置
- cocos2d-x-3.0 alpha1与C++11练习三:飞镖忍者,如何移动精灵及