如何使用cocos2d-x翻转卡片

如何使用cocos2d-x翻转卡片,cocos2d-x,cocos2d-x-3.0,Cocos2d X,Cocos2d X 3.0,我需要翻转一张卡片来看到它的背面,然后是侧面,然后是正面,动画如下:。我如何使用cocos2d-x做到这一点?我已经在3D测试中查看了OrbitCamera和RotateBy。它们与我想要的非常接近,唯一的问题是当精灵转过身时,我看不到背面(至少应该是另一个纹理,但从后面的摄影机看同样的纹理)。我知道我应该用两个精灵来达到这个效果,但是我不知道该怎么做。我应该以不同的Z顺序放置2个精灵吗?请注意。使用两种精灵:精灵前、精灵后 init(首先显示spriteBack): 将spriteFront缩

我需要翻转一张卡片来看到它的背面,然后是侧面,然后是正面,动画如下:。我如何使用cocos2d-x做到这一点?我已经在3D测试中查看了
OrbitCamera
RotateBy。它们与我想要的非常接近,唯一的问题是当精灵转过身时,我看不到背面(至少应该是另一个纹理,但从后面的摄影机看同样的纹理)。我知道我应该用两个精灵来达到这个效果,但是我不知道该怎么做。我应该以不同的Z顺序放置2个精灵吗?请注意。

使用两种精灵:精灵前、精灵后

init(首先显示spriteBack):
将spriteFront缩放为(0,1)(将X缩放为0,同时将Y缩放为1)
将spriteBack缩放到(1,1)

翻转动画:
将spriteBack缩放到(0,1)
动画之后,
将spriteFront缩放为(1,1)


使用2个精灵:精灵前、精灵后

init(首先显示spriteBack):
将spriteFront缩放为(0,1)(将X缩放为0,同时将Y缩放为1)
将spriteBack缩放到(1,1)

翻转动画:
将spriteBack缩放到(0,1)
动画之后,
将spriteFront缩放为(1,1)


使用2个精灵:精灵前、精灵后

init(首先显示spriteBack):
将spriteFront缩放为(0,1)(将X缩放为0,同时将Y缩放为1)
将spriteBack缩放到(1,1)

翻转动画:
将spriteBack缩放到(0,1)
动画之后,
将spriteFront缩放为(1,1)


使用2个精灵:精灵前、精灵后

init(首先显示spriteBack):
将spriteFront缩放为(0,1)(将X缩放为0,同时将Y缩放为1)
将spriteBack缩放到(1,1)

翻转动画:
将spriteBack缩放到(0,1)
动画之后,
将spriteFront缩放为(1,1)

试试这个:

float duration = 2.0f;
auto actionBy = RotateBy::create(duration / 2, Vec3(0, 90, 0));

backCard->runAction(RotateBy::create(0, Vec3(0, 90, 0)));
frontCard->runAction( Sequence::create(
                            actionBy,
                            CallFunc::create([backCard, actionBy](){backCard->runAction(actionBy);}),
                            nullptr)
试试这个:

float duration = 2.0f;
auto actionBy = RotateBy::create(duration / 2, Vec3(0, 90, 0));

backCard->runAction(RotateBy::create(0, Vec3(0, 90, 0)));
frontCard->runAction( Sequence::create(
                            actionBy,
                            CallFunc::create([backCard, actionBy](){backCard->runAction(actionBy);}),
                            nullptr)
试试这个:

float duration = 2.0f;
auto actionBy = RotateBy::create(duration / 2, Vec3(0, 90, 0));

backCard->runAction(RotateBy::create(0, Vec3(0, 90, 0)));
frontCard->runAction( Sequence::create(
                            actionBy,
                            CallFunc::create([backCard, actionBy](){backCard->runAction(actionBy);}),
                            nullptr)
试试这个:

float duration = 2.0f;
auto actionBy = RotateBy::create(duration / 2, Vec3(0, 90, 0));

backCard->runAction(RotateBy::create(0, Vec3(0, 90, 0)));
frontCard->runAction( Sequence::create(
                            actionBy,
                            CallFunc::create([backCard, actionBy](){backCard->runAction(actionBy);}),
                            nullptr)
您应该查看

使用
javascript
与cocos2dx相同

显示:功能(pIsFaceUp){
让自我=这个;
设timeFlip=0.5;
设callFunc=cc.callFunc(函数(){
self.cardBG.spriteFrame=pisfaceoup?self.texFrontBG:self.texBackBG;
self.point.node.active=pIsFaceUp;
self.suit.node.active=pIsFaceUp;
self.mainPic.node.active=pIsFaceUp;
如果(!pIsFaceUp)
self.node.skewY=135;
其他的
self.node.skewY=45;
});
如果(!pIsFaceUp)
{
self.node.skewY=0;
let action=cc.skewBy(timeFlip/2,0,45);
让动作2=cc.skewTo(timeFlip/2,0180);
self.node.runAction(cc.sequence(action,callFunc,action2));
}否则
{
self.node.skewY=180;
let action=cc.skewBy(timeFlip/2,0,-45);
设action2=cc.skewTo(timeFlip/2,0,0);
self.node.runAction(cc.sequence(action,callFunc,action2));
}
},
您应该查看

使用
javascript
与cocos2dx相同

显示:功能(pIsFaceUp){
让自我=这个;
设timeFlip=0.5;
设callFunc=cc.callFunc(函数(){
self.cardBG.spriteFrame=pisfaceoup?self.texFrontBG:self.texBackBG;
self.point.node.active=pIsFaceUp;
self.suit.node.active=pIsFaceUp;
self.mainPic.node.active=pIsFaceUp;
如果(!pIsFaceUp)
self.node.skewY=135;
其他的
self.node.skewY=45;
});
如果(!pIsFaceUp)
{
self.node.skewY=0;
let action=cc.skewBy(timeFlip/2,0,45);
让动作2=cc.skewTo(timeFlip/2,0180);
self.node.runAction(cc.sequence(action,callFunc,action2));
}否则
{
self.node.skewY=180;
let action=cc.skewBy(timeFlip/2,0,-45);
设action2=cc.skewTo(timeFlip/2,0,0);
self.node.runAction(cc.sequence(action,callFunc,action2));
}
},
您应该查看

使用
javascript
与cocos2dx相同

显示:功能(pIsFaceUp){
让自我=这个;
设timeFlip=0.5;
设callFunc=cc.callFunc(函数(){
self.cardBG.spriteFrame=pisfaceoup?self.texFrontBG:self.texBackBG;
self.point.node.active=pIsFaceUp;
self.suit.node.active=pIsFaceUp;
self.mainPic.node.active=pIsFaceUp;
如果(!pIsFaceUp)
self.node.skewY=135;
其他的
self.node.skewY=45;
});
如果(!pIsFaceUp)
{
self.node.skewY=0;
let action=cc.skewBy(timeFlip/2,0,45);
让动作2=cc.skewTo(timeFlip/2,0180);
self.node.runAction(cc.sequence(action,callFunc,action2));
}否则
{
self.node.skewY=180;
let action=cc.skewBy(timeFlip/2,0,-45);
设action2=cc.skewTo(timeFlip/2,0,0);
self.node.runAction(cc.sequence(action,callFunc,action2));
}
},
您应该查看

使用
javascript
与cocos2dx相同

显示:功能(pIsFaceUp){
让自我=这个;
设timeFlip=0.5;
设callFunc=cc.callFunc(函数(){
self.cardBG.spriteFrame=pisfaceoup?self.texFrontBG:self.texBackBG;
self.point.node.active=pIsFaceUp;
self.suit.node.active=pIsFaceUp;
self.mainPic.node.active=pIsFaceUp;
如果(!pIsFaceUp)
self.node.skewY=135;
其他的
self.node.skewY=45;
});
如果(!pIsFaceUp)
{
self.node.skewY=0;
let action=cc.skewBy(timeFlip/2,0,45);
让动作2=cc.skewTo(timeFlip/2,0180);
self.node.runAction(cc.sequence(action,callFunc,action2));
}否则
{
self.node.skewY=180;
let action=cc.skewBy(timeFlip/2,0,-45);
设action2=cc.skewTo(timeFlip/2,0,0);
self.node.runAction(cc.sequence(action,callFunc,action2));