飞机大战03之飞机发射子d,添加敌人

飞机大战03之飞机发射子d,添加敌人,第1张

概述飞机发射子d: d幕,是雷电游戏的精华。这就需要对子d的运动轨迹进行控制。 先做一个最简单的子d发射,后面再添加各种d幕(实际上主要是研究d幕) 说是最简单,其实也是最普通的子d发射,产生一个颗子d移动就OK了。 方法:做一个子d发射的计时器,产生子d,子d做MoveBy动作就OK了。 代码: GameLayer.cpp void GameLayer::fireSchedule(float dt)

飞机发射子d:

d幕,是雷电游戏的精华。这就需要对子d的运动轨迹进行控制。

先做一个最简单的子d发射,后面再添加各种d幕(实际上主要是研究d幕)

说是最简单,其实也是最普通的子d发射,产生一个颗子d移动就OK了。

方法:做一个子d发射的计时器,产生子d,子d做MoveBy动作就OK了。

代码:

GameLayer.cpp

voID GameLayer::fireSchedule(float dt){	Size screenSize = Director::getInstance()->getWinSize() ;	Vec2 crePos = m_pPlayerPlane->getposition() ;//子d的初始位置	float flyTime = 1.0f ;	Sprite * pBullet = Sprite::create("bullet1.png") ;	pBullet->setposition(crePos) ;	addChild(pBullet,ZORDER_BulLET) ;	flyTime = ((screenSize.height - crePos.y) / screenSize.height)*flyTime ;//移动的时间跟,发射的距离相关	pBullet->runAction(		Sequence::create(		MoveBy::create(flyTime,Vec2(0,screenSize.height - crePos.y)),RemoveSelf::create(true),nullptr)		) ;}


敌人新建了一个类,因为,到后面敌人可能还需要有一些自己的属性。

EnermySprite.h

#ifndef _ENERMY_SPRITE_H_#define _ENERMY_SPRITE_H_#include "cocos2d.h"USING_NS_CC ;typedef enum {	kEnermyTypeNone = 0,kEnermyType1,kEnermyType2,kEnermyType3,kEnermyType4,}EnermyType;class EnermySprite : public Sprite{public:	static EnermySprite * createByType(EnermyType type);	static const char * getimagenameByType(EnermyType type);public:	EnermySprite();	~EnermySprite();private:};#endif


EnermySprite.cpp

#include "EnermySprite.h"EnermySprite * EnermySprite::createByType(EnermyType type){	const char * pImage = getimagenameByType(type) ;	EnermySprite * pRet = new EnermySprite() ;	pRet->initWithfile(pImage) ;	pRet->autorelease() ;	return pRet ;}const char * EnermySprite::getimagenameByType(EnermyType type){	const char* pImagename = nullptr;	switch (type)	{	case kEnermyType1:		pImagename = "enemy1.png" ;		break;	case kEnermyType2:		pImagename = "enemy2.png" ;		break;	case kEnermyType3:		pImagename = "enemy3.png" ;		break;	case kEnermyType4:		pImagename = "enemy4.png" ;		break;	default:		break;	}	return pImagename ;}EnermySprite::EnermySprite(){}EnermySprite::~EnermySprite(){}


添加到游戏中:

GameLayer.h

voID GameLayer::createEneschedule(float dt){	int ran = CCRANDOM_0_1() * 4 + 1 ;	EnermyType type ;	switch (ran)	{	case 1:		type = kEnermyType1;		break;	case 2:		type = kEnermyType2;		break;	case 3:		type = kEnermyType3;		break;	case 4:		type = kEnermyType4;		break;	default:		break;	}	auto pEne = EnermySprite::createByType(type) ;	float x = CCRANDOM_0_1()*(Director::getInstance()->getWinSize().wIDth - pEne->getBoundingBox().size.wIDth / 2) +  pEne->getBoundingBox().size.wIDth / 2;	float y = Director::getInstance()->getWinSize().height + pEne->getBoundingBox().size.height / 2 ;	float flyTime = 2.0f ;	pEne->runAction(			Sequence::create(				MoveBy::create(flyTime,-(Director::getInstance()->getWinSize().height + pEne->getBoundingBox().size.height))),CallFuncN::create(CC_CALLBACK_1(GameLayer::enermyMoveEndCallback,this)),nullptr			)		) ;	addChild(pEne) ;	pEne->setposition(x,y) ;	m_pEnermyVec.pushBack(pEne) ;}voID GameLayer::enermyMoveEndCallback(Node * pNode){	EnermySprite * pEnermy = dynamic_cast<EnermySprite*>(pNode) ;	m_pEnermyVec.eraSEObject(pEnermy);}


又是一个计时器,记得要添加一个敌人的vector来存放敌人。

总结

以上是内存溢出为你收集整理的飞机大战03之飞机发射子d,添加敌人全部内容,希望文章能够帮你解决飞机大战03之飞机发射子d,添加敌人所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1053506.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存