如何使用 SKAction 改变 SKSpriteNode 的位置

Posted

技术标签:

【中文标题】如何使用 SKAction 改变 SKSpriteNode 的位置【英文标题】:How to change position of SKSpriteNode with SKAction 【发布时间】:2017-09-11 16:16:28 【问题描述】:
while word != ""

    if word[word.startIndex] == "R" 

        let moveSpriteToRight = SKAction.move(to: CGPoint(x: sprite.position.x+128, y: sprite.position.y), duration: 1)

        sprite.run(moveSpriteToRight)

     else if word == "D" 

        let moveSpriteToDown = SKAction.move(to: CGPoint(x: sprite.position.x, y: sprite.position.y-128), duration: 1)

        sprite.run(moveSpriteToDown)

     else if word == "L" 

        let moveSpriteToLeft = SKAction.move(to: CGPoint(x: sprite.position.x-128, y: sprite.position.y), duration: 1)

        sprite.run(moveSpriteToLeft)

     else if word == "U" 

        let moveSpriteToUp = SKAction.move(to: CGPoint(x: sprite.position.x, y: sprite.position.y+128), duration: 1)

        sprite.run(moveSpriteToUp) 
    

    word.remove(at: word.startIndex)

这是我代码的一部分。我不能多次使用 SKAction。例如,如果单词 = "ULD",那么精灵应该沿着路径向上 (U)、然后向左 (L) 和向下 (D) 移动。并且每次用户通过手势创建新的轨迹时,记录手势的终止通过 touchesEnded 发生。 Sprite 他们必须每次执行。但是我在模拟器中的精灵在这个例子中的位置变成了向下。

【问题讨论】:

【参考方案1】:

您可以将您的操作放入一个数组中,并在所有检查完成后按顺序运行它们

let actions = [SKAction]()

while word != ""

    if word[word.startIndex] == "R" 
        actions.append(SKAction.move(to: CGPoint(x: sprite.position.x+128, y: sprite.position.y), duration: 1))
    

    if word == "D" 
        actions.append(SKAction.move(to: CGPoint(x: sprite.position.x, y: sprite.position.y-128), duration: 1))
     

    if word == "L" 
        actions.append(SKAction.move(to: CGPoint(x: sprite.position.x-128, y: sprite.position.y), duration: 1))
     

    if word == "U" 
        actions.append(SKAction.move(to: CGPoint(x: sprite.position.x, y: sprite.position.y+128), duration: 1))
    

    word.remove(at: word.startIndex)


let sequenceOfActions = SKAction.sequence([actions])
sprite.run(sequenceOfActions) 

【讨论】:

我认为当人们在没有任何解释的情况下投反对票并且自己不提供任何答案时,这很有趣。如果您有理由拒绝投票,则此答案有效。 欢迎您@Prooffan。如果这回答了您的问题,您应该将其标记为正确,这样其他人也会知道这一点;)

以上是关于如何使用 SKAction 改变 SKSpriteNode 的位置的主要内容,如果未能解决你的问题,请参考以下文章

如何防止在暂停场景上运行 SKAction(取消暂停后),节点纹理在暂停/取消暂停场景后不改变

如何使用 Swift SpriteKit 在 For 循环中一一创建 SKSprite 节点

为 SKSprite 游戏创建登录页面

将 SKSprite 的图像更改为 SKShapeNode

按顺序更改SKAction.wait(forDuration :)

如何停止或暂停 SKAction 播放音乐? - 斯威夫特