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学习笔记(19)--label 、label atlas
  • cocos2d-x学习笔记(23)--地图的使用3--CCTMXLayer
  • Cocos2d-x 2.0 之 Actions “三板斧” 之一
  • Cocos2d-x学习(一):HelloWorld
  • cocos2d-x学习笔记(18)--游戏打包(windows平台)
  • cocos2d 设置屏幕默认方向
  • cocos2d-x学习笔记(16)--spritesheet(精灵表单)
  • cocos2d-x学习笔记(15)--地图的使用(TMX)
  • cocos2dx在xcode下开发,编译到android上(2)
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1