cocos2dx掼蛋_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 = newBullet(temp); //创建一个对象if (pRet && pRet->init()) //内存申请到,初始化正确,那么就返回对象

{

pRet->autorelease();returnpRet;

}else{

delete pRet;

pRet=NULL; //否则就删掉~returnNULL;

}

}

Bullet::Bullet(PlayerLayer*temp) //把playerLayer保存~

{

_player=temp;

}

Bullet::~Bullet()

{

}

(2)初始化子弹的方法

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

voidBullet::initBullet()

{for (int i = 0; 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())

{returnsp;

}

}returnnullptr;

}

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

void Bullet::spawBullet(floatdt)

{

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 / 2);

Sprite* bullet =getAvailableBulletSprite();//得到空闲的子弹~

Size screenSize= Director::getInstance()->getVisibleSize();if(bullet)

{

bullet->setVisible(true);

bullet->setPosition(bulletPosition);float moveOffset = screenSize.height + bullet->getContentSize().height / 2 -playerPosition.y;

auto moveBy= MoveBy::create(moveOffset / VELOCITY_OF_BULLET, Vec2(0, 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 / 5);

三、效果图展示~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值