Android cocos2d 弹弓游戏 Catapult 源代码 完成

本文提供了Android cocos2d弹弓游戏Catapult的源代码,并介绍了改进,包括添加MyContactListener进行碰撞监听,使用粒子系统展示碰撞动画,以及添加GameOverScene。文章强调了b2World对象需要手动删除,而加入到Scene的Node由Cocos2d自动析构,同时作为Delegate的Scene在退出时需从触摸调度器中移除。
摘要由CSDN通过智能技术生成

本文是 Android cocos2d 弹弓游戏 Catapult 源代码 的后续


参考下面两篇文章, 完成了较为完整的弹弓游戏

http://mssyy2010.blog.51cto.com/4595971/856611

http://www.raywenderlich.com/4787/how-to-make-a-catapult-shooting-game-with-cocos2d-and-box2d-part-2


现在把源代码提供给大家, 可以从下面的 link 下载

https://github.com/PaynePan/share_src/archive/master.zip


相对前一个版本改进如下

1) 增加了 MyContactListener 进行碰撞监听

2) 增加了粒子系统, 作为碰撞的动画

3) 增加了 GameOverScene, 游戏结束后用户可以重新开始或者退出


要点

加入 Scene 的 Node 不用delete

加入到 HelloWorld 中的 Node ( 就是用 this->addChild(sprite, 0) ), 不需要析构

     Cocos2d 有机制自动析构这些对象


b2World 对象需delete

我们创建了 m_world = new b2World(gravity);, 应该delete它

    m_world 中的 entity, 就是用下面的方法创建的实体, b2World 有机制自己去析构

          m_world->CreateBody()

          m_world->CreateJoint()

 但不是b2World 中的实体, 比如 contactListener 需要析构


作为Delegate的 Scence 需要remove

当Scene 析构的时候,如果 Scene 是 TouchDelegate, 要把它 remove 掉

      CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);

否则当 Scence 都不存在, Director 还会调用它的方法,引起 crash


析构的位置

 当调用replaceScene 的时候  

     CCDirector::sharedDirector()->replaceScene(GameOver::scene());

下面的函数void HelloWorld::onExit() 被触发

void HelloWorld::onExit() {
	delete m_world;
	delete contactListener;
	CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);

}

我选择这个位置进行相关对象的析构, 程序跑起来还没发现问题.


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值