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

时间:2015-08-22 22:15:42

标签: ios swift sprite-kit

我正在使用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中纹理的原点坐标吗?

2 个答案:

答案 0 :(得分:1)

使用纹理和动画创建子节点。致电node.addChild(textureNode)让它变成一个孩子。然后在该子节点上运行该操作,该节点始终与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中的图像。

答案 1 :(得分:1)

我认为您误解了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)])))
}