【问题标题】:Call function after running an SKAction运行 SKAction 后调用函数
【发布时间】:2018-06-11 04:49:01
【问题描述】:

在我的 SpriteKit 游戏中,我想在运行 SKAction 后调用一个函数。

我假设有可能:

let node = SKSpriteNode()
...
node.run(<action: SKAction>, completion: <() -> Void>)

但我不知道在&lt;() -&gt; Void&gt; 中添加什么来调用函数。

func actionDone() {
...
}

【问题讨论】:

  • 您可以使用尾随闭包语法node.run(yourAction) { actionDone() },如果您除了调用actionDone之外还想做一些事情,它可能会派上用场。

标签: ios swift sprite-kit skaction


【解决方案1】:

很简单,只要把函数名不带括号写进去即可:

node.run(someAction, completion: actionDone)

并称之为

completion()

run 方法的主体内。


或者带参数

func run(action : SKAction, completion:(String)->()) {
    // do the action
    completion("Done")
}

func actionDone(param: String) {
   print(param)
}

【讨论】:

  • 对不起,新的一年……新的稠密……你说的是什么意思:“在动作体内。”?
  • 我承认这句话可能有点误导。我的意思是:像第二个例子一样用参数调用它。
  • 啊,谢谢。我认为将命名与语法混合时,我的认知受到了宿醉的影响。因此,completion 既是参数的名称,也将是函数的名称,也称为完成,并且在其他地方定义了完成函数。对吗?
  • completion 只是一个类型为(String)-&gt;() 的参数标签,它是一个传递字符串参数但没有返回值的闭包。从技术上讲,函数是一个闭包,因此您可以传递任何与签名匹配的函数。
  • 是的,我明白了。让我感到困惑的是,您将完成既用作参数名称又用作函数的名称,然后说要在 run 方法的主体中调用它……然后演示了调用它,然后又说在某些东西中这样做.将语法从语义中解压缩并与使用通用名称的所有内容保持距离是我的想法。
猜你喜欢
  • 2023-03-23
  • 2017-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多