gpt4 book ai didi

swift - SpriteKit SKAction.runBlock 传递参数问题

转载 作者:行者123 更新时间:2023-11-28 07:04:43 33 4
gpt4 key购买 nike

我在使用 SKAction.runBlock 时遇到了一些奇怪的行为。基本上我使用以下语法:

AnAction = SKAction.runBlock({ SomeFunction(SomeParameter) })

在我有 100 多个 case 的 switch 语句中

IDTargetSprite = FindTargetSprite()
TypeSprite = FindTypeSprite(IDTargetSprite)

switch TypeAction
{
...
case eTypeAction.DropBomb.rawValue:
ActionBuilt = SKAction.runBlock({ DropBomb(IDTargetSprite) })

case eTypeAction.DropStar.rawValue:
dParamsAction = LoadParamsAction()
ActionBuilt = SKAction.runBlock({ DropStar(IDTargetSprite, dParamsAction) })
...
}

这段代码包含在程序开头的一个循环中,我在其中遍历了一个 TypeAction 数组

for TypeAction in tTypeAction
{
// execute above code
}

然后我稍后在另一个循环中执行这样的操作:

switch TypeSprite
{
case eActionTarget.SpriteA.rawValue:
SpriteA.runAction(ActionBuilt)

case eActionTarget.SpriteB.rawValue:
SpriteB.runAction(ActionBuilt)
}

到目前为止没有什么不寻常的,除了它不起作用,当我试图理解为什么我看到传递给 block 的参数不好但以一种非常奇怪的方式:有时传递给函数的参数在 block (IDTargetSprite 或 dParamsAction)在调用的函数中没有正确的值,它保留了他在循环的前一次迭代中刚刚拥有的值。

在这些情况下,如果我查看 runBlock 行之前的参数值,该值是正确的,但是当执行操作时,在调用的函数中找到的值不再正确并且等于循环的前一次迭代。

我通过这样做建立了一种方法(但尚未经过广泛测试):

case eTypeAction.DropBomb.rawValue:
TempParam = IDTargetSprite
ActionBuilt = SKAction.runBlock({ DropBomb(TempParam) })

我必须为每种情况设置一个特定的 TempParam...

我是否在使用 SKAction.runBlock 或一般 block 时遗漏了一些明显的东西?

最佳答案

通过传递常量而不是变量作为参数找到了一种快速方法。所以如果我这样做它会起作用:

case eTypeAction.DropStar.rawValue:
let dParamsAction = LoadParamsAction()
ActionBuilt = SKAction.runBlock({ DropStar(IDTargetSprite, dParamsAction) })

关于swift - SpriteKit SKAction.runBlock 传递参数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31019878/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com