一、创建文件~

BulletLayer.h

BulletLayer.cpp

二、How to do?

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

     Bullet(PlayerLayer* temp);

    ~Bullet();

    static Bullet* create(PlayerLayer *temp);

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

Bullet* Bullet::create(PlayerLayer *temp)
{
Bullet *pRet = new Bullet(temp); //创建一个对象
if (pRet && pRet->init()) //内存申请到,初始化正确,那么就返回对象
{
pRet->autorelease();
return pRet;
}
else
{
delete pRet;
pRet = NULL; //否则就删掉~
return NULL;
}
} Bullet::Bullet(PlayerLayer *temp) //把playerLayer保存~
{
_player = temp;
} Bullet::~Bullet()
{ }

(2)初始化子弹的方法

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

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

(3)发射子弹的方法~

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

Sprite* Bullet::getAvailableBulletSprite()
{
for (auto&sp : _bulletsArray)
{
if (!sp->isVisible())
{return sp;
}
}
return nullptr;
}

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

void Bullet::spawBullet(float dt)
{ Vec2 playerPosition = _player->getPlayerPlanePositon(); //这里就是得到玩家飞机的锚点位置。
                                 //大家会发现前面没有实现这个方法~~在这里贴一下  
Vec2 PlayerLayer::getPlayerPlanePositon()
{
return _playerplane->getPosition();
}
Size PlayerLayer::getPlayerPlaneContentSize()
{
return _playerplane->getContentSize();
}

    auto bulletPosition = Vec2(playerPosition.x, playerPosition.y + _player->getPlayerPlaneContentSize().height / );

    Sprite* bullet = getAvailableBulletSprite();//得到空闲的子弹~
Size screenSize = Director::getInstance()->getVisibleSize(); if (bullet)
{
bullet->setVisible(true);
bullet->setPosition(bulletPosition);
float moveOffset = screenSize.height + bullet->getContentSize().height / - playerPosition.y;
auto moveBy = MoveBy::create(moveOffset / VELOCITY_OF_BULLET, Vec2(, moveOffset));
auto toggleVisibility = Hide::create();
auto action = Sequence::createWithTwoActions(moveBy, toggleVisibility);
bullet->runAction(action);
}
//同样跟敌机一样,就是飞出屏幕的时候设置为消失~
}

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

    this->initBullet();

    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. 一个简单例子:贫血模型or领域模型

    转:一个简单例子:贫血模型or领域模型 贫血模型 我们首先用贫血模型来实现.所谓贫血模型就是模型对象之间存在完整的关联(可能存在多余的关联),但是对象除了get和set方外外几乎就没有其它的方法,整个 ...

  2. 入门必看--JavaScript基础

    JavaScript他是一种描述性语言,其实他并不难学,只要用心学,一定会学好,我相信大家在看这篇文章的时候,一定也学过HTML吧,使用JavaScript就是为了能和网页有更好的交互,下面切入主题. ...

  3. LR 测试数据库总结

    今天工作中需要对mysql进行性能测试 我尝试用LR来做:但是mysql需要现在电脑上安装一个OBDC的mysql驱动器,然后在电脑的管理工具中的数据源中加入这个mysql驱动,测试连接数据库成功,O ...

  4. [Effective JavaScript 笔记] 第1章:让自己习惯javascript小结

    在这里整理一下,每条对应的提示 第1条:了解使用的js版本 确定应用程序支持的js的版本(浏览器也是应用程序噢) 确保使用的js特性是应用程序支持的(要不写了也运行不了) 总是在严格模式下编写和测试代 ...

  5. poj3041 二分图最小顶点覆盖

    Asteroids Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 17237   td>Accepted: 9375 ...

  6. iPhone取消软件更新上边的1

    去除设置的更新+1小红点提示主要分为越狱和非越狱设备两种方法. 越狱状态下方法: 首先将你的设备进行越狱: 越狱后安装ifile(这个自行搜索安装): 用ifile打开/System/Library/ ...

  7. editorial-render A

    PROBLEM LINK: PracticeContest Author: adminTester: Kevin AtienzaEditorialist: Ajay K. VermaRussian T ...

  8. 【Python】Django 支持 restful 风格 url

    URL通配符示例: url(r'^file_download/(?P<filename>(.)*)$', views.FILE_DOWNLOAD_VIEW.as_view()), 代码示例 ...

  9. 尖刀出鞘的display常用属性及css盒模型深入研究

    一:diplay:inline-block 含义:指元素创建了一个行级的块级元素,该元素内部(内容)被格式化成一个块级元素,同时元素本身则被格式化成一个行内元素.更简单的说就是说inline-bloc ...

  10. global-local-static-object

    [本文链接] http://www.cnblogs.com/hellogiser/p/global-local-static-object.html [分析] 1.生命周期问题:static变量在固定 ...