【问题标题】:SKAction.move(to: ...) and SKAction.move(by: ...) does the exact same thing for meSKAction.move(to: ...) 和 SKAction.move(by: ...) 为我做同样的事情
【发布时间】:2019-12-06 04:12:14
【问题描述】:

我设置了一个 SKScene,我用一堆块填充。触摸后,我想将随机块移动到 SKScene 的 0,0 位置。 0,0 不是最终目标,但我用它来测试。我的节点被称为 bixel,我自然认为使用 SKAction.move(to: ...) 会将其移动到绝对坐标,如文档中所述,但是我必须遗漏一些东西,因为移动到 0,0 确实什么都没有,但是移动到 100,0 会将其向右移动 100 个像素。

我已经尝试了所有的 move(to: ...) (moveTo(x: ...) 等。我已经尝试了 move(by: ...) ,它应该可以正常工作。 使用下面提供的代码,如果我在 action 和 action2 之间切换(通过重建项目),结果总是相同的,它向右移动了 100 像素。 我也尝试过点转换: let point = self.convert(CGPoint(x: 0, y: 0), to: bixel) 但结果是一样的。

let bixel = bixels[Int.random(in: 0..<bixels)] bixel.fillColor = .red

let action = SKAction.move(to: CGPoint(x: 100, y: 0), duration: 0.1)
let action2 = SKAction.move(by: CGVector(dx: 100, dy: 0), duration: 0.1)
bixel.zPosition = 1000
bixel.run(action)

编辑:您是完全正确的@Martin R。正如我在对您的回答的评论中所写的那样,每个 ShapeNode 都认为他们的位置是 0,0。这是因为我如何初始化它们。 我这样做了:

let bixel = SKShapeNode(
    rect: CGRect(
        x: xOffset + (xF * shapeSize.width),
        y: self.size.height - yOffset - (yF * shapeSize.height),
        width: shapeSize.width - space,
        height: shapeSize.height - space
    ),
    cornerRadius: 2
)

这使它认为它的位置是 0,0。所以当我把它改成这样时:

let bixel = SKShapeNode(rectOf: shapeSize, cornerRadius: 2)
bixel.position = CGPoint(
    x: xOffset + (xF * shapeSize.width),
    y: self.size.height - yOffset - (yF * shapeSize.height)
)

一切正常。谢谢!

【问题讨论】:

  • 第二种方法指定相对于当前位置的移动。如果当前节点位置为 (0, 0),则没有区别。

标签: swift sprite-kit skaction


【解决方案1】:

SKAction.move(to:duration:) 创建一个将节点移动到给定位置的动作。

SKAction.move(to: CGPoint(x: 100, y: 0), duration: 0.1)

创建一个将节点移动到位置(100, 0)的动作。

SKAction.move(by:duration:) 创建一个相对于当前位置移动节点的动作。

SKAction.move(by: CGVector(dx: 100, dy: 0), duration: 0.1)

创建一个动作,将节点从其当前位置(x0, y0) 移动到新位置(x0+100, y0)

当(且仅当)当前节点位置为(0, 0)时,这两个操作具有相同的效果。

【讨论】:

  • 是的,我以为我明白这一点,从我读到的内容来看,它应该是这样工作的。但是对我来说,所有 326 个节点都是一样的,都在不同的位置。如果我这样做:例如SKAction.move(to: CGPoint(x: 0, y: 0), duration: 0.1),他们都会留在原地。如果我这样做:SKAction.move(to: CGPoint(x: 100, y: 0), duration: 0.1) 他们都会向右移动 100 个像素。编辑:嗯,出于某种原因,即使他们都分散在整个场景中,他们都“认为”他们的位置是 0,0。所以你绝对是对的!我只需要找出他们“这么想”的原因。
猜你喜欢
  • 1970-01-01
  • 2020-10-28
  • 2021-05-02
  • 2021-01-20
  • 2014-06-16
  • 2011-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多