cocos2dx游戏开发——微信打飞机学习笔记(九)——BulletLayer的搭建
一、创建文件~
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的搭建的更多相关文章
- cocos2dx游戏开发——微信打飞机学习笔记(三)——WelcomeScene的搭建
一.场景与层的关系: cocos2dx的框架可以说主要由导演,场景,层,精灵来构成: 1.其中导演,意如其名,就是操控整个游戏的一个单例,管理着整个游戏. 2.场景就像电影的一幕剧情,所以说,懂得如何 ...
- cocos2dx游戏开发——微信打飞机学习笔记(七)——Enemy的搭建
一.文件创建~ Enemy.h Enemy.cpp 二.How to do? 由于我是已经完成成个游戏的功能,所以我会将游戏中enemy所需要的很多功能基本上都先考虑到了,如果大家自己在做的时候也许没 ...
- cocos2dx游戏开发——微信打飞机学习笔记(一)——开发准备
一.环境的搭建 1.Windows开发准备: (1)软件下载及安装 •下载Cocos2d-x 最新版本:http://www.cocos2d-x.org/download 或者从Cocos2d-x G ...
- cocos2dx游戏开发——微信打飞机学习笔记(八)——EnemyLayer的搭建
一.创建文件= = EnemyLayer.h EnemyLayer.cpp Ps:我绝对不是在凑字数~. 二.How to do? (1)一些宏 ...
- cocos2dx游戏开发——微信打飞机学习笔记(五)——BackgroundLayer的搭建
一.创建文件~ 文件名:BackgroundLayer.h BackgroundLayer.cpp 架构就跟前面的一样,我就直接进入正题 啦,而且github有完整代码,欢迎下载~ 二.创建滚动的背景 ...
- cocos2dx游戏开发——微信打飞机学习笔记(十)——碰撞检测的搭建
一.七说八说 大家都发现了= =,做了那么多,发现就是摆设,完全没有打飞机的感觉,没有实现碰撞的监测.比如说呢,子弹和敌机,玩家与敌机就是需要有碰撞检测的说,然后在这篇我想会很长很长的教 ...
- cocos2dx游戏开发——微信打飞机学习笔记(二)——游戏框架
一.游戏的基本框架: WelcomeScene ——> GameScene ——> GameOverScene || ...
- cocos2dx游戏开发——微信打飞机学习笔记(六)——PlayerLayer的搭建
一.创建文件~ PlayerLayer.h PlayerLayer.cpp 一般类名都会和文件名有关系的~(在这里当然是一样) 二.How to do? 1.首先就是放一个飞机~ CC_SYNTHES ...
- cocos2dx游戏开发——微信打飞机学习笔记(四)——GameScene的搭建
一.创建文件 首先呢,就是那个创建新的.h 和 .cpp 的文件,然后可以起名为GameScene 最重要的就是一定要创建在Classes的目录下哦= =,别手抖= =. 二.GameScene.h和 ...
随机推荐
- 微信JS-SDK
<div class="lbox_close wxapi_form"> <h3 id="menu-basic">基础接口</h3& ...
- iOS7: 如何获取不变的UDID
如何使用KeyChain保存和获取UDID 本文是iOS7系列文章第一篇文章,主要介绍使用KeyChain保存和获取APP数据,解决iOS7上获取不变UDID的问题.并给出一个获取UDID的工具类,使 ...
- Entity Framework CodeFirst数据迁移
前言 紧接着前面一篇博文Entity Framework CodeFirst尝试. 我们知道无论是“Database First”还是“Model First”当模型发生改变了都可以通过Visual ...
- [转]uses-permission权限列表
android.permission.ACCESS_CHECKIN_PROPERTIES允许读写访问”properties”表在checkin数据库中,改值可以修改上传 android.permiss ...
- CSS 实现垂直居中的几种方案
最近在学关系型数据库相关,MySQL 和 Postgre,捎带着学了 PHP,为了练手这几天就忙着自己搭博客,项目部署在某云上,该云算是良心,给的空间自己搭博客用足够了.本来想着每日一bo的,所以有的 ...
- Android自定义遮罩层设计
在做网页设计时,前端设计人员会经常用到基于JS开发的遮罩层,并且背景半透明.这样的效果怎么样在Android上实现呢?这个实现并不困难,先来上效果图: <ignore_js_op> 201 ...
- overflow-x和overflow-y其中一个设置为visible时的奇怪现象
当overflow-x和overflow-y其中一个设置为visible时,如果另一个不是visible,那么它会被自动重置为auto 看看效果先: 第一次遇到这个问题时,我还以为是chrome的一个 ...
- ubuntu上完全卸载package
inux上完整的卸载apt方式安装软件的办法. 假设你的包叫做: your_pkg apt-get --purge remove your_pkg apt-get autoremove apt-get ...
- selec2 clone不起作用。
<table class="table table-bordered"> <thead> <tr> <th width ="16 ...
- 【JAVA、C++】LeetCode 003 Longest Substring Without Repeating Characters
Given a string, find the length of the longest substring without repeating characters. For example, ...