最近在做一个射击类游戏,涉及到子弹的回收和重用,通过容器的实现,内存基本保持稳定,具体代码如下:

定义:

    std::vector<PhysicsSprite *> m_oldBullets; std::vector<PhysicsSprite *> m_newBullets; void destroyBullet();PhysicsSprite* createBullet();bool  isCreate = true;

createBullet实现:

PhysicsSprite* HelloWorld::createBullet()
{PhysicsSprite* bullet = NULL;if(m_oldBullets.size()==0){bullet = addNewSpriteAtPosition(CCPointMake(200, 200));if(bullet){bullet->getPhysicsBody()->SetActive(true);bullet->setVisible(true);}m_newBullets.push_back(bullet);}else {bullet = m_oldBullets.at(0);bullet->getPhysicsBody()->SetActive(true);bullet->setVisible(true);CCPoint p = CCPointMake(200, 200);bullet->getPhysicsBody()->SetTransform(b2Vec2(p.x/PTM_RATIO, p.y/PTM_RATIO), 0);m_oldBullets.erase(m_oldBullets.begin());m_newBullets.push_back(bullet);}return bullet;
}

destroyBullet实现:

void HelloWorld::destroyBullet()
{if(m_newBullets.size()!=0){PhysicsSprite* bullet = m_newBullets.at(0);if(bullet){bullet->getPhysicsBody()->SetActive(false);bullet->setVisible(false);m_newBullets.erase(m_newBullets.begin());m_oldBullets.push_back(bullet);CCLog("");}}
}

只是个demo,具体放入游戏代码可以不用vector实现,存储也只需要保留一个m_oldBullets就可以了

游戏中子弹的回收重用相关推荐

  1. Silverlight 游戏开发:可重用的拖拽控件

    游戏中有各种各样的拖拽需求,大到窗口,小到图标,在游戏界面操作中,点击和拖拽占据了用户操作的大部分行为,如何做好一个拖拽控件至关重要,做一个可重用的拖拽控件更加重要,我的这些实现方法可能比较另类,但只 ...

  2. 游戏中子弹的工作原理

    自1992年<沃芬斯坦3D>大爆发以来,第一人称射击(FPS)游戏便一直是电子游戏产业的主要产品.从那以后,随着图像升级.巨额预算和电子竞技生态系统的发展,这一类型游戏也在不断演变.但它的 ...

  3. Cocos2d-x 游戏中子弹的设计

    FPS游戏中用的最多的就是子弹了,这几天有不少人问我游戏中如何设计子弹?大量子弹显示的时候,游戏会不会卡? 今天有点时间,我针对这两个问题,简单的写了一个子弹的发射. 效果图: 首先我们来理下如何设计 ...

  4. Cocos2d-x 游戏中子弹的设计(一)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2D开发网--Cocos2Dev.com,谢谢! 原文地址: http://www.cocos2dev.com/?p=379 FPS游戏中用的最多的就 ...

  5. Cocos2d-x 游戏中子弹的设计 (一)

    FPS游戏中用的最多的就是子弹了,这几天有不少人问我游戏中如何设计子弹?大量子弹显示的时候,游戏会不会卡? 今天有点时间,我针对这两个问题,简单的写了一个子弹的发射. 效果图: 首先我们来理下如何设计 ...

  6. 飞机游戏中子弹与飞机的移动与边界源码

    上回写了在场景中显示飞机与子弹现在再来把他们的移动和边界写下 飞机的移动:首先创建一个监听事件,看飞机是否被拖动,再写一个被拖动之后的方法.方法里面先创建一个target继承飞机的所有属性,在给tar ...

  7. [Unity3d]游戏中子弹碰撞的处理

    如果使用Collider+Rigidbody的方式来处理,则它是每一帧进行判定碰撞:如果子弹过快导致碰撞发生在2帧之间,则会导致无法捕获这个碰撞效果 基于上述原因,我们要使用射线Raycast进行子弹 ...

  8. 基于java的雷电游戏系统设计与实现(项目报告+答辩PPT+源代码+部署视频)

    项目报告 基于Java的雷电游戏 电脑游戏,是指在计算机上能够运转的游戏软件.这种软件具有较强的娱乐性.电脑游戏的创新和发展与硬件.软件的发展紧密相关.它能够给玩家提供一个虚拟的环境,使游戏带给了人们 ...

  9. 基于Java的雷电游戏设计(含源文件)

    欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye 基于Java的雷电游戏 摘   要    电脑游戏,是指在计算机上能够运转的游戏软件.这种软件具 ...

最新文章

  1. 提升淘宝排名的27个因素
  2. github 地图上画区域的工程_筑工程测量区别
  3. java网络编程,通过TCP,Socket实现多对一的局域网聊天室
  4. 五大板块(5)——字符串
  5. python数字转中文字符_Python实现中文数字转换为阿拉伯数字的方法示例
  6. 数据库 | MySQL安装与配置
  7. Android studio 升级指定dradle
  8. Python基础---时间模块 (二)
  9. es 1.7 ik 配置
  10. 利用阿里云邮件推送免费发邮件,每天免费200封,速度快,还高大上
  11. 博士学位真的那么重要吗?上交大博士亲述科研心路,获4万高赞,网友:这是知乎最好的回答...
  12. iconfont-阿里巴巴矢量图标库在layui中的使用
  13. 计算机八进制 算法视频,八进制转二进制计算器
  14. python笛卡尔坐标系_THREE笛卡尔右手坐标系详解
  15. 什么软件可以把真人照片卡通化、动漫化?
  16. excel一列数字里有特殊符号怎么求和
  17. 345. Reverse Vowels of a String
  18. 面试——如何测试一支笔?
  19. Torch 论文复现:梯度加权类激活映射 Grad-CAM
  20. js 取色器和 颜色拾取工具

热门文章

  1. JDK版本和项目所用版本不匹配的问题
  2. 【ElasticSearch】ELK statck
  3. Luogu P3346 [ZJOI2015]诸神眷顾的幻想乡 广义SAM 后缀自动机
  4. pdfwin10闪退_windows10打开pdf文件3秒后秒退
  5. 计算机科学与技术qs排名,全球QS专业排名(计算机科学与信息技术)
  6. 电路其他基本元器件(蜂鸣器、晶振等)
  7. HTML box盒子模型练习校园风光木棉花
  8. Unity中初步使用Navmesh寻路系统
  9. nginx locating匹配问题(1) ---cookie
  10. 【渝粤教育】广东开放大学 计算机导论 形成性考核 (51)