`
445822357
  • 浏览: 738709 次
文章分类
社区版块
存档分类
最新评论

cocos2dx 利用CCOrbitCamera实现扑克牌翻牌效果

 
阅读更多

感谢点评与关注,欢迎转载与分享。
勤奋努力,持之以恒!

#include "HelloWorldScene.h"
#include "SimpleAudioEngine.h"

using namespace cocos2d;
using namespace CocosDenshion;

CCScene* HelloWorld::scene()
{
    CCScene *scene = CCScene::create();
    HelloWorld *layer = HelloWorld::create();
    scene->addChild(layer);
    return scene;
}
bool HelloWorld::init()
{
    if ( !CCLayer::init() )
    {
        return false;
    }
    size = CCDirector::sharedDirector()->getWinSize();
    
    //加一背景
    CCLayerColor* background = CCLayerColor::create(ccc4(255, 180, 255, 255), size.width, size.height);
    this->addChild(background);
    
    actionIsDone = true;//标示动作是否完成
    
    createPoker(); //创建扑克
    
    return true;
}

//创建扑克
void HelloWorld::createPoker()
{
    //扑克牌正面
    CCSprite* pokerFront = CCSprite::create("poker_front.png");
    pokerFront->setVisible(false);
    pokerFront->setPosition(ccp(size.width/2, size.height/2));
    this->addChild(pokerFront,1,123);
  
    //扑克牌反面
    CCSprite* pokerBack = CCSprite::create("poker_back.png");
    pokerBack->setPosition(pokerFront->getPosition());
    this->addChild(pokerBack,1,321);
}
//翻牌动作
void HelloWorld::startOrbitAction()
{
    //扑克牌正面
    CCSprite* pokerFront = (CCSprite*)this->getChildByTag(123);
    //扑克牌反面
    CCSprite* pokerBack = (CCSprite*)this->getChildByTag(321);
    
    float orbitTime = 1;
    if (pokerFront->isVisible() == false && actionIsDone == true) {
        actionIsDone = false;
        //第一个参数是旋转的时间,第二个参数是起始半径,第三个参数半径差,第四个参数是起始Z角,第五个参数是旋转Z角差,第六个参数是起始X角,最后一个参数旋转X角差,
        CCOrbitCamera* orbitFront = CCOrbitCamera::create(orbitTime, 1, 0, 270, 90, 0, 0);
        CCSequence* sequenceFront = CCSequence::createWithTwoActions(CCShow::create(), orbitFront);
        CCTargetedAction* targetFront = CCTargetedAction::create(pokerFront, sequenceFront);

        CCOrbitCamera* orbitBack = CCOrbitCamera::create(orbitTime, 1, 0, 0, 90, 0, 0);
        pokerBack->runAction(CCSequence::create(orbitBack, CCHide::create(), targetFront, CCCallFunc::create(this, callfunc_selector(HelloWorld::actionIsDownFunc)),NULL));
    }else if(pokerFront->isVisible() == true && actionIsDone == true){
        actionIsDone = false;
        CCOrbitCamera* orbitFront = CCOrbitCamera::create(orbitTime, 1, 0, 270, 90, 0, 0);
        CCSequence* sequenceFront = CCSequence::createWithTwoActions(CCShow::create(), orbitFront);
        CCTargetedAction* targetFront = CCTargetedAction::create(pokerBack, sequenceFront);
        
        CCOrbitCamera* orbitBack = CCOrbitCamera::create(orbitTime, 1, 0, 0, 90, 0, 0);
        pokerFront->runAction(CCSequence::create(orbitBack, CCHide::create(), targetFront, CCCallFunc::create(this, callfunc_selector(HelloWorld::actionIsDownFunc)),NULL));
    }
}

void HelloWorld::actionIsDownFunc()
{
    actionIsDone = true;
}

bool HelloWorld::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)
{
    //翻牌动作
    startOrbitAction();
    return true;
}

void HelloWorld::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent){}
void HelloWorld::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent){}
void HelloWorld::onEnter()
{
    CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, false);
    CCLayer::onEnter();
}
void HelloWorld::onExit()
{
    CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);
    CCLayer::onExit();
}
HelloWorld::~HelloWorld(){}




两张扑克牌资源:


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics