cocos2d-x 翻牌效果CCOrbitCamera

原创地址:<a target=_blank href="http://cn.cocos2d-x.org/tutorial/show?id=2183">http://cn.cocos2d-x.org/tutorial/show?id=2183</a>
cpp

#include "PokerSprite.h"

PokerSprite* PokerSprite::create(const char* front,const char* back){
	PokerSprite* pSrpite = new PokerSprite();

	if (pSrpite->initWithTexture(CCTextureCache::sharedTextureCache()->addImage(front),CCTextureCache::sharedTextureCache()->addImage(back)))
	{
		pSrpite->autorelease();
		return pSrpite;
	}
	delete pSrpite;
	return NULL;
}

PokerSprite* PokerSprite::create(CCSprite* front,CCSprite* back){
	PokerSprite* pSrpite = new PokerSprite();

	if (pSrpite->initWithSprite(front,back))
	{
		pSrpite->autorelease();
		return pSrpite;
	}
	delete pSrpite;
	return NULL;
}

bool PokerSprite::initWithTexture(CCTexture2D* ptFront,CCTexture2D* ptBack){

	front = CCSprite::createWithTexture(ptFront);
	back = CCSprite::createWithTexture(ptBack);

	if (front && back && CCSprite::init())
	{
		this->setContentSize(back->getContentSize());
		//扑克牌正面
		front->setVisible(false);
		CCPoint pos = ccp(this->getContentSize().width / 2,this->getContentSize().height / 2);
		front->setPosition(pos);
		this->addChild(front);
		//扑克牌背面
		back->setPosition(pos);
		this->addChild(back);

		return true;
	}

	return false;
}

bool PokerSprite::initWithSprite(CCSprite* pFornt,CCSprite* pBack){

	if (pFornt && pBack && CCSprite::init())
	{
		front = pFornt;
		back = pBack;

		this->setContentSize(back->getContentSize());
		//扑克牌正面
		front->setVisible(false);
		CCPoint pos = ccp(this->getContentSize().width / 2,this->getContentSize().height / 2);
		front->setPosition(pos);
		this->addChild(front);
		//扑克牌背面
		back->setPosition(pos);
		this->addChild(back);

		return true;
	}
	return false;
}

void PokerSprite::open(float duration){

	if (front && back)
	{
		front->stopAllActions();
		back->stopAllActions();

		// 正面z轴起始角度为90度(向左旋转90度),然后向右旋转90度
		CCOrbitCamera* orbitFront = CCOrbitCamera::create(duration*0.5,1,90,-90,0);
		// 正面z轴起始角度为0度,然后向右旋转90度
		CCOrbitCamera* orbitBack = CCOrbitCamera::create(duration*0.5,0);

		front->setVisible(false);
		// 背面向右旋转90度->正面向左旋转90度
		back->runAction(CCSequence::create(CCShow::create(),orbitBack,CCHide::create(),CCTargetedAction::create(front,CCSequence::create(CCShow::create(),orbitFront,NULL)),NULL));
	}
	else{
		cclOG("[ERROR] PokerSprite front or back not init.");
	}
}


#ifndef __POKERSPRITE_H__
#define __POKERSPRITE_H__

#include "cocos2d.h"
USING_NS_CC;

/*
具有翻牌效果的CCSprite
*/
class PokerSprite :public CCSprite
{
public:
	/**
	*   创建一个PokerSprite
	*   front   牌的正面
	*   back    牌的背面
	*/
	static PokerSprite* create(const char* front,const char* back);
	/**
	*   创建一个PokerSprite
	*   front   牌的正面
	*   back    牌的背面
	*/
	static PokerSprite* create(CCSprite* front,CCSprite* back);
	/* 翻牌
	* duration  动作时长(秒)
	*/
	void open(float duration = 1.5);
protected:
	bool initWithSprite(CCSprite* fornt,CCSprite* back);
	bool initWithTexture(CCTexture2D* fornt,CCTexture2D* back);
private:
	CCSprite* front; // 正面
	CCSprite* back;     // 背面
};

#endif

调用:

	CCSize size = CCDirector::sharedDirector()->getVisibleSize();
		//创建PokerSrpite,指定正面和背面所使用的图片路径
		poker = PokerSprite::create("10.png","27.png");


		//创建PokerSrpite,指定正面和背面所使用的CCSprite
		//CCSprite* front = CCSprite::create("front.png")
		//front->addChild(img);
		//poker = PokerSprite::create(front,CCSprite::create("back.png"));


		// 设置位置
		poker->setPosition(ccp(size.width*0.5,size.height*0.5));


		// 添加到Layer
		addChild(poker);


		//调用翻牌动作
		poker->open();

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...