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