C++ - 如何反向播放动画 Cocos2DX
C++ - How to play animation in opposite direction Cocos2DX
我得到了这样的 png
我也得到了这段代码
SpriteFrameCache::getInstance()->addSpriteFramesWithFile("walk.plist", "walk.png");
Vector<SpriteFrame*> animFrames;
animFrames.reserve(8);
char spriteFrameByName[MAX_WORD] = { 0 };
for (int index = 1; index <= 8; index++)
{
sprintf(spriteFrameByName, "%d.png", index);
auto frame = SpriteFrameCache::getInstance()->getSpriteFrameByName(spriteFrameByName);
animFrames.pushBack(frame);
}
Animation* animation = Animation::createWithSpriteFrames(animFrames, time);
sprite->runAction(Animate::create(animation));
现在我想水平翻转这个动画。看起来像这样
不是要创建另一个 png 文件,有没有办法在 C++ 代码中做到这一点?
水平翻转图像等于缩放该图像的 x 轴减 1。我不熟悉 Cocos2DX,但是将图像的 x 比例乘以 -1 将为您水平翻转。
这个 answer 可能会帮助您缩放:
动画* animation = Animation::createWithSpriteFrames(animFrames, time);
sprite->runAction(Animate::create(animation));
sprite->setFlipX(true)
我不完全确定翻转函数是否处理您要翻转的对象的旋转。我相信它只会改变纹理的方向。如果您需要计算您的角色在您的游戏世界中面对的方向,这最终可能会使事情变得更加复杂。
您可以在 Y 轴上旋转整个精灵。通过这样做,它将确保所有东西都朝向正确的方向,而不仅仅是纹理。以下代码通过旋转整个精灵提供相同的视觉效果。
sprite->setRotation3D(Vec3(0, 180, 0));
我得到了这样的 png
我也得到了这段代码
SpriteFrameCache::getInstance()->addSpriteFramesWithFile("walk.plist", "walk.png");
Vector<SpriteFrame*> animFrames;
animFrames.reserve(8);
char spriteFrameByName[MAX_WORD] = { 0 };
for (int index = 1; index <= 8; index++)
{
sprintf(spriteFrameByName, "%d.png", index);
auto frame = SpriteFrameCache::getInstance()->getSpriteFrameByName(spriteFrameByName);
animFrames.pushBack(frame);
}
Animation* animation = Animation::createWithSpriteFrames(animFrames, time);
sprite->runAction(Animate::create(animation));
现在我想水平翻转这个动画。看起来像这样
不是要创建另一个 png 文件,有没有办法在 C++ 代码中做到这一点?
水平翻转图像等于缩放该图像的 x 轴减 1。我不熟悉 Cocos2DX,但是将图像的 x 比例乘以 -1 将为您水平翻转。
这个 answer 可能会帮助您缩放:
动画* animation = Animation::createWithSpriteFrames(animFrames, time);
sprite->runAction(Animate::create(animation));
sprite->setFlipX(true)
我不完全确定翻转函数是否处理您要翻转的对象的旋转。我相信它只会改变纹理的方向。如果您需要计算您的角色在您的游戏世界中面对的方向,这最终可能会使事情变得更加复杂。
您可以在 Y 轴上旋转整个精灵。通过这样做,它将确保所有东西都朝向正确的方向,而不仅仅是纹理。以下代码通过旋转整个精灵提供相同的视觉效果。
sprite->setRotation3D(Vec3(0, 180, 0));