告诉 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)])))
}
我正在用 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)])))
}