告诉 iOS 不要调整 SKNode 动画纹理的大小?

Tell iOS to not resize SKNode animated texture?

我正在用 Swift 为 iOS 编写一个游戏。

正在使用一组纹理初始化游戏。我在动画中使用这些纹理。

我每次都创建一个 SKNode,大小不同:

let node = SKSpriteNode(texture: nodeTextures[0])
node.size = size; //from func argument
node.runAction(SKAction.repeatActionForever
(SKAction.animateWithTextures
(nodeTextures, timePerFrame: 0.05, resize: false, restore: false)))

使用调整大小的纹理渲染的节点。

我可以告诉 iOS 不要调整纹理大小吗?如果可以,我能以某种方式在 SKNode 中定义纹理的原点坐标吗?

使用纹理和动画创建一个 child 节点。调用 node.addChild(textureNode) 使其成为 child。然后 运行 在那个 child 节点上的动作,它将始终与 node 处于相同的位置,但不会改变 node 的大小。像这样:

let node = SKSpriteNode()
node.size = size; //from func argument
// Create texture node to hold the texture
let textureNode = SKSpriteNode(texture: nodeTextures[0])
node.addChild(textureNode)
textureNode.runAction(SKAction.repeatActionForever
(SKAction.animateWithTextures
(nodeTextures, timePerFrame: 0.05, resize: false, restore: false)))

这允许您稍后调整 node 的大小而无需重新缩放 textureNode 中的图像。

我认为您误解了 SpriteKit 的“animate”调整大小功能。如果你输入“false”,你将看到的只是真正的动画被拉伸以填充你的父节点。因此,您需要将“resize”参数设置为 true 并且您的动画将被修正为原始大小。

使用您的代码,您可以简单地缩放动画以适应您的上下文:

if let firstTexture = nodeTextures.first {
   let node = SKSpriteNode(texture: firstTexture, size:size)
   let scaledAction = SKAction.scale(to: (node.size.height/firstTexture.size().height),duration:0.01)
   node.run(SKAction.repeatActionForever
(SKAction.sequence([scaledAction,SKAction.animate(nodeTextures, timePerFrame: 0.05, resize: true, restore: false)])))
}