我有一个相当简单的动画,其中包含 8 个相同大小的图像。我没有使用内置的动画方法,因为我想手动控制动态动画的速度。我正在使用预加载的 SKTexture 并执行 [object setTexture:texture];在 update:currentTime 方法中。
问题是有时纹理会变得非常扭曲/拉伸(stretch)。经过大量调试后,我将其缩小为仅在节点静止时发生。事实上,如果我将节点移动一个像素并像这样将其移回原位,问题就不会发生:
[self setTexture:texture];
CGPoint currentPosition = self.position;
self.position = CGPointMake(currentPosition.x + 1, currentPosition.y + 1);
self.position = currentPosition;
这让我觉得非常 hacky。我认为在幕后,它触发了父节点上的重绘。还有其他人经历过吗?我有两个主要问题。 1)原因是什么?和 2) 如何在不诉诸黑客的情况下解决这个问题?
这是一个普通的框架和一个拉伸(stretch)的版本(我为质量、占位符艺术道歉......)
编辑:经过一些评论后,我意识到我忘了提及我将节点的大小缩放为小于纹理的大小。即使纹理大小相同,将新纹理应用于尺寸较小的节点也会导致错误。
最佳答案
似乎在使用 setTexture: 设置纹理后 Sprite 节点不会改变它的大小,直到被移动、调整大小等......
您可以通过手动设置 size 来解决此问题设置纹理后。
[spriteNode setTexture:texture];
[spriteNode setSize:texture.size];
关于ios - 手动动画纹理时 SKSpriteNode 拉伸(stretch),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21793145/