【问题标题】:How to reference the node from within a custom SKAction Swift如何从自定义 SKAction Swift 中引用节点
【发布时间】:2017-04-12 19:45:51
【问题描述】:

我可以按如下方式创建自定义 SKAction:

extension SKAction {
  class func move(from: CGPoint, halfWayTo: CGPoint, duration: TimeInterval) -> SKAction {
    let midPoint = CGPoint(x: (from.x + halfWayTo.x)/2, y: (from.y + halfWayTo.y)/2 )
    return SKAction.move(to: midPoint, duration: duration)
  }
}

然后我像这样使用它:

//Setup
let node = SKNode()
node.position = CGPoint(x: 50, y: 50)
let destination = CGPoint(x: 100, y: 100)

//Move from node's current position half way towards the destination
let action = SKAction.move(from: node.position, halfWayTo: destination, duration: 1)
node.run(action)

但要符合标准:

SKAction.move(to: destination, duration: 1)

我宁愿说:

let action = SKAction.move(halfWayTo: destination, duration: 1)
node.run(action)

但我不知道如何从自定义 SKAction 中引用“节点”,以便获取它的位置并计算中点?

【问题讨论】:

  • 我一直在尝试做类似的事情,但我想不出任何办法。正如您所意识到的,当您调用SKAction.move(halfwayTo:) 时,SKAction 无法访问相关的SKNode。您对SKNode 的扩展是一个有趣的想法,但我想我会坚持使用对SKAction 的扩展,并且只是通过起点,就像您在原始示例中所做的那样。似乎更好地在代码中明确我们正在创建一个SKAction
  • 我同意它作为 SKAction 的扩展更好。

标签: swift skaction


【解决方案1】:

你使用self

extension SKAction {
  class func move(halfWayTo: CGPoint, duration: TimeInterval) -> SKAction {
    let from = self.position
    let midPoint = CGPoint(x: (from.x + halfWayTo.x)/2, y: (from.y + halfWayTo.y)/2 )
    return SKAction.move(to: midPoint, duration: duration)
  }
}

然后调用(如你所说)

node.move(halfWayTo: B, duration: 1)

【讨论】:

  • 非常感谢 TheValyreanGroup。
  • 我现在已经尝试了您的建议。我在“let from = self.position”行收到编译错误:“类型'SKAction'没有成员'位置'
  • 我意识到我最初的问题有语法错误,这意味着可以执行 node.move 但这是错误的。它需要是 SKAction.move 所以我编辑了我原来的问题。
  • 正如@Adahus 所指出的,SKAction 没有position 成员。
【解决方案2】:

我仍然不确定 SKAction 是否引用了它应用到的节点 - 即使它正在运行 - 或者即使它有,我也不确定是否有办法访问它。如果有人知道,请告诉我。

我想到了一种方法如下:

不扩展SKAction,扩展SKNode如下:

extension SKNode {
  func move(halfWayTo: CGPoint, duration: TimeInterval) -> SKAction {
    let from = self.position
    let midPoint = CGPoint(x: (from.x + halfWayTo.x)/2, y: (from.y + halfWayTo.y)/2 )
    return SKAction.move(to: midPoint, duration: duration)
  }
}

然后按如下方式使用:

//Setup
let node = SKNode()
node.position = CGPoint(x: 50, y: 50)
let destination = CGPoint(x: 100, y: 100)

//Move from node's current position half way towards the destination
let action2 = node.move(halfWayTo: destination, duration: 1)
node.run(action2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2021-10-05
    相关资源
    最近更新 更多