为什么当我调用 setFlipped(true) 时动画没有水平翻转?
Why isn't an animation flipped horizontally when I call setFlipped(true)?
我有一些精灵,其中玩家角色面向右侧。
我可以很好地从这些精灵创建动画。问题是,如果我想让精灵面向左边。
我执行以下操作:
Sprite* p = Sprite::createWithSpriteFrameName("Jumping");
p->setPosition(Vec2(_visibleSize.width/2,_visibleSize.height/2));
this->addChild(p);
p->setFlippedX(true);
Vector<AnimationFrame*> animFrames;
float frameRate = 0.32f;
std::vector<std::string> frameNames = {"Running 0","Running 1","Running 2"};
for (int i =0; i<3;i++){
auto frameName = frameNames.at(i);
auto spriteFrame = SpriteFrameCache::getInstance()->getSpriteFrameByName(frameName);
ValueMap userInfo;
userInfo["frame_index"] = Value(i);
auto animFrame = AnimationFrame::create(spriteFrame, frameRate, userInfo);
animFrames.pushBack(animFrame);
}
auto animation = Animation::create(animFrames, frameRate);
auto animationAction = Animate::create(animation);
p->runAction(RepeatForever::create(animationAction));
p->setFlippedX(true);
动画运行,但动画仍然显示玩家面向右侧。 问题是什么?为什么 setFlippedX
在这种情况下不起作用?
我正在使用 Cocos2d-x 3.13.1。我找不到任何错误,所以我假设我做错了什么。
这是因为您在代码中调用了两次,
p->setFlippedX(true);
这似乎是一个错误,而且似乎没有解决方法,除了使用两个精灵集 - 一个用于所有不翻转的精灵,另一个用于当精灵翻转时翻转。
更糟糕的是 - 这意味着如果您想要翻转,则不能使用动画代码,而是需要实现您自己的逻辑,以使用适当的精灵、动画集等。
编辑:它似乎已在 3.16
中修复
我有一些精灵,其中玩家角色面向右侧。 我可以很好地从这些精灵创建动画。问题是,如果我想让精灵面向左边。
我执行以下操作:
Sprite* p = Sprite::createWithSpriteFrameName("Jumping");
p->setPosition(Vec2(_visibleSize.width/2,_visibleSize.height/2));
this->addChild(p);
p->setFlippedX(true);
Vector<AnimationFrame*> animFrames;
float frameRate = 0.32f;
std::vector<std::string> frameNames = {"Running 0","Running 1","Running 2"};
for (int i =0; i<3;i++){
auto frameName = frameNames.at(i);
auto spriteFrame = SpriteFrameCache::getInstance()->getSpriteFrameByName(frameName);
ValueMap userInfo;
userInfo["frame_index"] = Value(i);
auto animFrame = AnimationFrame::create(spriteFrame, frameRate, userInfo);
animFrames.pushBack(animFrame);
}
auto animation = Animation::create(animFrames, frameRate);
auto animationAction = Animate::create(animation);
p->runAction(RepeatForever::create(animationAction));
p->setFlippedX(true);
动画运行,但动画仍然显示玩家面向右侧。 问题是什么?为什么 setFlippedX
在这种情况下不起作用?
我正在使用 Cocos2d-x 3.13.1。我找不到任何错误,所以我假设我做错了什么。
这是因为您在代码中调用了两次,
p->setFlippedX(true);
这似乎是一个错误,而且似乎没有解决方法,除了使用两个精灵集 - 一个用于所有不翻转的精灵,另一个用于当精灵翻转时翻转。
更糟糕的是 - 这意味着如果您想要翻转,则不能使用动画代码,而是需要实现您自己的逻辑,以使用适当的精灵、动画集等。
编辑:它似乎已在 3.16
中修复