手动设置纹理动画时SKSpriteNode拉伸

时间:2014-02-15 03:52:39

标签: ios animation sprite-kit stretch

我有一个相当简单的动画,有8个相同大小的图像。我没有使用内置的动画方法,因为我想动态地手动控制动画的速度。我正在使用预加载的SKTexture并执行[object setTexture:texture];更新内部:currentTime方法。

问题是有时纹理会变形或拉伸。经过大量的调试后,我将其缩小到仅在节点静止时才发生。事实上,如果我将节点移动一个像素并像这样移动它,问题永远不会发生:

[self setTexture:texture];
CGPoint currentPosition = self.position;
self.position = CGPointMake(currentPosition.x + 1, currentPosition.y + 1);
self.position = currentPosition;

这对我来说非常 hacky。我想在幕后,它会触发父节点上的重绘。还有其他人经历过这个吗?我有两个主要问题。 1)原因是什么? 2)如何在不诉诸黑客的情况下解决这个问题?

这是一个普通的框架和一个拉伸的版本(我为质量,占位艺术道歉......)

not-stretched streched

编辑:在几条评论之后,我意识到我忘了提到我缩放了节点的大小小于纹理的大小。即使纹理大小相同,将新纹理应用于尺寸较小的节点也会导致错误。

1 个答案:

答案 0 :(得分:6)

似乎在使用setTexture: sprite节点设置纹理时,不会改变它的大小,直到被移动,调整大小等...

您可以在设置纹理后手动设置size来解决此问题。

[spriteNode setTexture:texture];
[spriteNode setSize:texture.size];