用兩個圖片初始化兩個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; }