手动动画纹理时,SKSpriteNode被拉伸

4
我有一个非常简单的动画,包含8张大小相同的图片。我没有使用内置的动画方法,因为我想手动控制动画的速度。我使用预加载的SKTexture,并在update:currentTime方法中使用[object setTexture:texture];。
问题是有时纹理会变得非常扭曲/拉伸。经过大量调试,我已经缩小了问题范围,只发生在该节点静止时。事实上,如果我将该节点移动一个像素并向后移动,就不会出现这个问题:
[self setTexture:texture];
CGPoint currentPosition = self.position;
self.position = CGPointMake(currentPosition.x + 1, currentPosition.y + 1);
self.position = currentPosition;

我觉得这样做非常“hacky”。我认为在底层中,它会触发父节点的重新绘制。有其他人也遇到过这个问题吗?我有两个主要问题:1)原因是什么?2)如何解决这个问题而不使用“hack”方法?

下面是一个正常的框架和一个拉伸后的版本(对于质量,占位符艺术……我表示歉意):

not-stretched streched

编辑:经过几条评论,我意识到我忘了提到我将节点的大小缩小到了纹理的大小之下。即使纹理的大小相同,将新的纹理应用于比纹理小的节点会导致错误。


其他人也遇到了同样的问题 - 这可能是SK中的一个错误。也许在iOS 7.1 beta版中已经修复了这个问题。 - CodeSmile
尝试添加 [self setSize:texture.size]; - Dobroćudni Tapir
@DobroćudniTapir 那对我来说有效。我更喜欢这样做。我一直在缩小精灵,所以现在每次应用纹理时我只需重新调整比例即可。您要将其添加为答案,以便我可以接受它吗? - nothappybob
1个回答

7
似乎在使用 setTexture: 设置纹理后,精灵节点不会改变其大小,直到被移动、调整大小等等...
在设置纹理后,您可以通过手动设置 size 来解决这个问题。
[spriteNode setTexture:texture];
[spriteNode setSize:texture.size];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接