微信经典飞机大战之三:飞机登场、帧动画、飞机层接口和属性

1.  飞机来临,并将飞机添加到场景中

我们用PlaneLayer来放置飞机,我们的主角。和导演类CCDirector的shareDirector一样,我们在PlaneLayer中也添加PlaneLayer的一个静态指针sharePlane。但是这里和导演类不一样的是,我们必须在创建PlaneLayer后才能使用这个sharePlane,而且在PlaneLayer销毁后就不能使用它了。

PlaneLayer的头文件如下:

#pragma once

#include "cocos2d.h"

USING_NS_CC;

class PlaneLayer : public CCLayer
{
public:

	PlaneLayer(void);

	~PlaneLayer(void);

	static PlaneLayer* create();  //实现create函数

	virtual bool init();

public:

	static PlaneLayer* sharedPlane;  //提供sharePlane全局指针
};
PlaneLayer.cpp文件如下:

#include "PlaneLayer.h"

PlaneLayer* PlaneLayer::sharedPlane=NULL;

PlaneLayer::PlaneLayer(void)
{
	isAlive=true;
}

PlaneLayer::~PlaneLayer(void)
{

}

PlaneLayer* PlaneLayer::create()
{
	PlaneLayer* pRet=new PlaneLayer();
	if(pRet && pRet->init())
	{
		pRet->autorelease();
		sharedPlane=pRet;
		return pRet;
	}
	else
	{
		CC_SAFE_DELETE(pRet);
		return NULL;
	}
}

这里不能再简单的使用LAYER_CREATE_FUNC宏了,而是要自己实现create。

我们还需要把这个层添加到GameLayer.cpp的init函数中,才能调用。这样就可以把飞机添加到场景中。

//加入planeLayer
this->planeLayer=PlaneLayer::create();
this->addChild(planeLayer);


2.  添加动画效果

有一个帧动画,就是飞机在飞行过程中机尾是在喷火的。

下面介绍一下帧动画的使用步骤:

(1)create,创建CCAnimation类实例

(2)setDelayPerUnit,设置帧间间隔时间

(3)addSpriteFrame,添加帧图片

(4)create,创建CCAnimation类实例,传入(1)从CCAnimation实例,注意CCAnimation是动画过程的名词,CCAnimate才是动画动作。

(5)精灵调用runAction

(6)注意CCAnimationCache这是一个动画类全局缓冲池。可以将大量重复动画放在里面使用,加快游戏速度。

bool PlaneLayer::init()
{
	bool bRet=false;
	do
	{
		CC_BREAK_IF(!CCLayer::init());

		CCSize winSize=CCDirector::sharedDirector()->getWinSize();

		//加载全局资源
		CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("ui/shoot.plist");

		CCSprite* plane=CCSprite::createWithSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("hero1.png"));
		//把飞机放置在底部中央
		plane->setPosition(ccp(winSize.width/2,plane->getContentSize().height/2));
		//添加精灵,AIRPLANE是tag
		this->addChild(plane,0,AIRPLANE);

		//闪烁动画
		CCBlink* blink=CCBlink::create(1,3);

		CCAnimation* animation=CCAnimation::create();
		animation->setDelayPerUnit(0.1f);
		animation->addSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("hero1.png"));
		animation->addSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("hero2.png"));
		CCAnimate* animate=CCAnimate::create(animation); //帧动画

		plane->runAction(blink); //执行闪烁动画
		plane->runAction(CCRepeatForever::create(animate)); //执行帧动画

		bRet=true;
	} while (0);

	return bRet;
}


3.  飞机层PlaneLayer的其他属性和接口

(1)bool isAlive;判断飞机主角是否活着的标志,初始为true

(2)int score;分数,刚开始为0

(3)void MoveTo(CCPoint location);飞机层移动的方法。触摸飞机移动

(4)void Blowup(int passScore);飞机爆炸的方法。当主角碰到炸弹死亡后执行爆炸动画效果

(5)void RemovePlane();移除飞机并转换至GameOver场景

以上这些内容都会在后续章节中有介绍。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值