Swift - 使用纹理数组更改 SKSpriteNode 纹理

Posted

技术标签:

【中文标题】Swift - 使用纹理数组更改 SKSpriteNode 纹理【英文标题】:Swift - Change SKSpriteNode texture using an array of textures 【发布时间】:2015-12-08 23:44:26 【问题描述】:

我正在尝试使用纹理数组为 SKSpriteNode 设置动画。我想要实现的是遍历纹理数组并通过每次迭代更改 SKSpriteNode 纹理并显示它的更改大约 1 秒。唯一的问题是,我相信随着动画的发生,循环仍在继续,所以我看不到变化。

我本质上希望能够在屏幕上看到每个纹理大约一两秒钟,然后它就会发生变化。这是我目前所拥有的。

var textures: [SKTexture] = [texture1, texture2, texture3, texture4]
var sprite = SKSpriteNode()

func animateSpriteTextures() 

    for texture in textures 
    /* Want to pause for about a second or two here, but does not. */
    sprite.texture = texture

    let scaleDown = SKAction.scaleTo(200, duration: 1)
    let scaleUp = SKAction.scaleTo(300, duration: 1)
    sprite.runAction(SKAction.sequence([scaleDown, scaleUp]))
    

【问题讨论】:

【参考方案1】:

查看animateWithTextures: 操作。你可以这样做:

sprite.runAction(SKAction.animateWithTextures(textures, timePerFrame: 1.0))

如果您需要在动画发生时更改精灵的大小,那么您可能需要创建一个动作组SKAction.group() 来协调动画和大小的变化,或者animateWithTextures:timePerFrame:resize:restore: 可能适合您。

【讨论】:

以上是关于Swift - 使用纹理数组更改 SKSpriteNode 纹理的主要内容,如果未能解决你的问题,请参考以下文章

Swift 使 sksprite 节点随时间移动得更快

为 SKSprite 游戏创建登录页面

sknode 颜色或纹理

将 SKSprite 的图像更改为 SKShapeNode

获取 SKPhysicsBody 以在纹理动画时更新(Swift)

SKSprite 场景的内存问题