cocos2d - 翻轉兩個Sprite


用兩個圖片初始化兩個CCSprite,一樣的大小,重疊在一起,分別叫做 foregroundNode 和 backgroundNode 。

- (void)flipover
{
    if (isFliping) {
        return;
    }
    [self chooseCard];
}

-(void) chooseCard
{
    isFliping = YES;
    CCSprite *fore = nil;
    CCSprite *back = nil;
    if (flipovered) {
        fore = self.foregroundNode;
        back = self.backgroundNode;
    }else{
        fore = self.backgroundNode;
        back = self.foregroundNode;
    }

    //始終保證前面的圖像是未橫向翻轉過的,后面的圖像是翻轉過的
    if ([back flipX] == NO) {
        [back setFlipX:YES];
    }
    if ([fore flipX] == YES) {
        [fore setFlipX:NO];
    }
    
    //執行動畫的時間
    float orbitTime = 0.3;
    
    //前景圖像轉動90度不可見
    [fore runAction:[CCSequence actions:[CCOrbitCamera actionWithDuration:orbitTime radius: 1 deltaRadius:0 angleZ:0 deltaAngleZ:90 angleX:0 deltaAngleX:0],[CCCallFunc actionWithTarget:self selector:@selector(showCard:)], nil]];
    
    //背景圖像同步旋轉,當前景圖像停止動畫時,背景圖像繼續旋轉90度,此時圖像左右是翻轉的,為了保證看着的圖像是正常的,所以在執行動畫前要翻轉一次
    [back runAction:[CCSequence actions:[CCOrbitCamera actionWithDuration:orbitTime*2 radius:1 deltaRadius:0 angleZ:0 deltaAngleZ:180 angleX:0 deltaAngleX:0], [CCCallFunc actionWithTarget:self selector:@selector(flipFinished)], nil]];
}

// 翻轉后,調整前后景圖像的層次
-(void)showCard:(id)sender
{
    if (flipovered) {
        [self.foregroundNode setZOrder:0];
        [self.backgroundNode setZOrder:1];
    }else{
        [self.foregroundNode setZOrder:1];
        [self.backgroundNode setZOrder:0];
    }
    flipovered = !flipovered;
}

- (void)flipFinished
{
    isFliping = NO;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM