一、创建文件~

BulletLayer.h

BulletLayer.cpp

二、How to do?

(1)实例化BulletLayer方法的实现~

  1. Bullet(PlayerLayer* temp);
  2.  
  3. ~Bullet();
  4.  
  5. static Bullet* create(PlayerLayer *temp);

大家发现这个bullet类的实例化方法很奇怪~,那是由于小白前面制作PlayerLayer的时候没有把他做成全局变量,所以bulletLayer就访问不到的说~,但是我们必须得到飞机的位置,要不子弹从哪里打出来~~,所以小白我简单粗暴,直接把PlayerLayer传进BulletLayer,但实际上可以用友元的方法进行实现,但是……请原谅小编的C++ premier英文版~ 只看了150多页~,以前看的c++教程有点水,所以。。。反正是个小游戏,先暂时实现吧,后来再来翻工~~~~

  1. Bullet* Bullet::create(PlayerLayer *temp)
  2. {
  3. Bullet *pRet = new Bullet(temp); //创建一个对象
  4. if (pRet && pRet->init()) //内存申请到,初始化正确,那么就返回对象
  5. {
  6. pRet->autorelease();
  7. return pRet;
  8. }
  9. else
  10. {
  11. delete pRet;
  12. pRet = NULL; //否则就删掉~
  13. return NULL;
  14. }
  15. }
  16.  
  17. Bullet::Bullet(PlayerLayer *temp) //把playerLayer保存~
  18. {
  19. _player = temp;
  20. }
  21.  
  22. Bullet::~Bullet()
  23. {
  24.  
  25. }

(2)初始化子弹的方法

这里采用的是跟初始化敌机一模一样的方法~所以呢~我们就……

  1. void Bullet::initBullet()
  2. {
  3. for (int i = ; i < BULLET_NUM; i++) //BUllET_NUM就是定义要初始化几个子弹的宏~
  4. {
  5. Sprite* bullet = Sprite::createWithSpriteFrameName("bullet1.png");
  6. bullet->setVisible(false);
  7. this->addChild(bullet);
  8. _bulletsArray.pushBack(bullet);
  9. }
  10. }

(3)发射子弹的方法~

同样是跟发射敌机的方法是一样的,首先就是先得到空闲的子弹~

  1. Sprite* Bullet::getAvailableBulletSprite()
  2. {
  3. for (auto&sp : _bulletsArray)
  4. {
  5. if (!sp->isVisible())
  6. {return sp;
  7. }
  8. }
  9. return nullptr;
  10. }

然后就是发射子弹的方法~

  1. void Bullet::spawBullet(float dt)
  2. {
  3.  
  4. Vec2 playerPosition = _player->getPlayerPlanePositon(); //这里就是得到玩家飞机的锚点位置。
  1. //大家会发现前面没有实现这个方法~~在这里贴一下  
  1. Vec2 PlayerLayer::getPlayerPlanePositon()
  2. {
  3. return _playerplane->getPosition();
  4. }
  5. Size PlayerLayer::getPlayerPlaneContentSize()
  6. {
  7. return _playerplane->getContentSize();
  8. }
  1.  
  1. auto bulletPosition = Vec2(playerPosition.x, playerPosition.y + _player->getPlayerPlaneContentSize().height / );
  2.  
  3. Sprite* bullet = getAvailableBulletSprite();//得到空闲的子弹~
  4. Size screenSize = Director::getInstance()->getVisibleSize();
  5.  
  6. if (bullet)
  7. {
  8. bullet->setVisible(true);
  9. bullet->setPosition(bulletPosition);
  10. float moveOffset = screenSize.height + bullet->getContentSize().height / - playerPosition.y;
  11. auto moveBy = MoveBy::create(moveOffset / VELOCITY_OF_BULLET, Vec2(, moveOffset));
  12. auto toggleVisibility = Hide::create();
  13. auto action = Sequence::createWithTwoActions(moveBy, toggleVisibility);
  14. bullet->runAction(action);
  15. }
  16. //同样跟敌机一样,就是飞出屏幕的时候设置为消失~
  17. }

(4)Init()中调用,并且加入到GameScene中就可以啦。

  1. this->initBullet();
  2.  
  3. this->schedule(schedule_selector(Bullet::spawBullet), 1.0 / );

三、效果图展示~

cocos2dx游戏开发——微信打飞机学习笔记(九)——BulletLayer的搭建的更多相关文章

  1. cocos2dx游戏开发——微信打飞机学习笔记(三)——WelcomeScene的搭建

    一.场景与层的关系: cocos2dx的框架可以说主要由导演,场景,层,精灵来构成: 1.其中导演,意如其名,就是操控整个游戏的一个单例,管理着整个游戏. 2.场景就像电影的一幕剧情,所以说,懂得如何 ...

  2. cocos2dx游戏开发——微信打飞机学习笔记(七)——Enemy的搭建

    一.文件创建~ Enemy.h Enemy.cpp 二.How to do? 由于我是已经完成成个游戏的功能,所以我会将游戏中enemy所需要的很多功能基本上都先考虑到了,如果大家自己在做的时候也许没 ...

  3. cocos2dx游戏开发——微信打飞机学习笔记(一)——开发准备

    一.环境的搭建 1.Windows开发准备: (1)软件下载及安装 •下载Cocos2d-x 最新版本:http://www.cocos2d-x.org/download 或者从Cocos2d-x G ...

  4. cocos2dx游戏开发——微信打飞机学习笔记(八)——EnemyLayer的搭建

    一.创建文件= =               EnemyLayer.h               EnemyLayer.cpp Ps:我绝对不是在凑字数~. 二.How to do? (1)一些宏 ...

  5. cocos2dx游戏开发——微信打飞机学习笔记(五)——BackgroundLayer的搭建

    一.创建文件~ 文件名:BackgroundLayer.h BackgroundLayer.cpp 架构就跟前面的一样,我就直接进入正题 啦,而且github有完整代码,欢迎下载~ 二.创建滚动的背景 ...

  6. cocos2dx游戏开发——微信打飞机学习笔记(十)——碰撞检测的搭建

    一.七说八说        大家都发现了= =,做了那么多,发现就是摆设,完全没有打飞机的感觉,没有实现碰撞的监测.比如说呢,子弹和敌机,玩家与敌机就是需要有碰撞检测的说,然后在这篇我想会很长很长的教 ...

  7. cocos2dx游戏开发——微信打飞机学习笔记(二)——游戏框架

    一.游戏的基本框架: WelcomeScene    ——>    GameScene   ——>   GameOverScene ||                           ...

  8. cocos2dx游戏开发——微信打飞机学习笔记(六)——PlayerLayer的搭建

    一.创建文件~ PlayerLayer.h PlayerLayer.cpp 一般类名都会和文件名有关系的~(在这里当然是一样) 二.How to do? 1.首先就是放一个飞机~ CC_SYNTHES ...

  9. cocos2dx游戏开发——微信打飞机学习笔记(四)——GameScene的搭建

    一.创建文件 首先呢,就是那个创建新的.h 和 .cpp 的文件,然后可以起名为GameScene 最重要的就是一定要创建在Classes的目录下哦= =,别手抖= =. 二.GameScene.h和 ...

随机推荐

  1. 微信JS-SDK

    <div class="lbox_close wxapi_form"> <h3 id="menu-basic">基础接口</h3& ...

  2. iOS7: 如何获取不变的UDID

    如何使用KeyChain保存和获取UDID 本文是iOS7系列文章第一篇文章,主要介绍使用KeyChain保存和获取APP数据,解决iOS7上获取不变UDID的问题.并给出一个获取UDID的工具类,使 ...

  3. Entity Framework CodeFirst数据迁移

    前言 紧接着前面一篇博文Entity Framework CodeFirst尝试. 我们知道无论是“Database First”还是“Model First”当模型发生改变了都可以通过Visual ...

  4. [转]uses-permission权限列表

    android.permission.ACCESS_CHECKIN_PROPERTIES允许读写访问”properties”表在checkin数据库中,改值可以修改上传 android.permiss ...

  5. CSS 实现垂直居中的几种方案

    最近在学关系型数据库相关,MySQL 和 Postgre,捎带着学了 PHP,为了练手这几天就忙着自己搭博客,项目部署在某云上,该云算是良心,给的空间自己搭博客用足够了.本来想着每日一bo的,所以有的 ...

  6. Android自定义遮罩层设计

    在做网页设计时,前端设计人员会经常用到基于JS开发的遮罩层,并且背景半透明.这样的效果怎么样在Android上实现呢?这个实现并不困难,先来上效果图: <ignore_js_op> 201 ...

  7. overflow-x和overflow-y其中一个设置为visible时的奇怪现象

    当overflow-x和overflow-y其中一个设置为visible时,如果另一个不是visible,那么它会被自动重置为auto 看看效果先: 第一次遇到这个问题时,我还以为是chrome的一个 ...

  8. ubuntu上完全卸载package

    inux上完整的卸载apt方式安装软件的办法. 假设你的包叫做: your_pkg apt-get --purge remove your_pkg apt-get autoremove apt-get ...

  9. selec2 clone不起作用。

    <table class="table table-bordered"> <thead> <tr> <th width ="16 ...

  10. 【JAVA、C++】LeetCode 003 Longest Substring Without Repeating Characters

    Given a string, find the length of the longest substring without repeating characters. For example, ...