Ios 对于SKSprite,customAction实际上是更新调用吗?

Ios 对于SKSprite,customAction实际上是更新调用吗?,ios,sprite-kit,Ios,Sprite Kit,由于普遍精神病,苹果在SKScene中调用了update(),但他们忘记在SKSpriteNode中调用更新 现在,根据我们所有的测试可以确定 在SpriteKit中,仅在sprite上使用“customAction”似乎与在场景中运行update中的内容完全相同 func teste() { let a = SKAction.customAction(withDuration: 5.0) { [weak self] node, elapsedTime in prin

由于普遍精神病,苹果在
SKScene
中调用了
update()
,但他们忘记在
SKSpriteNode
中调用更新

现在,根据我们所有的测试可以确定

在SpriteKit中,仅在sprite上使用“customAction”似乎与在场景中运行
update
中的内容完全相同

func teste() {

    let a = SKAction.customAction(withDuration: 5.0) { [weak self] node, elapsedTime in

        print("Honest to goodness, this is the run loop. I think.")
        print("\(self?.k) \(elapsedTime)")
        self?.k += 1
    }
    run(a)
}
我翻遍了文件,但没有结果

有人知道“customAction”确实在每一帧中运行是真的吗?这是一个有效且安全的更新呼叫吗

(例如:可以想象,可能有一个可怕的巧合,他们“每隔1/60次”或其他时间运行一次,而实际上它并不是在与场景相同的运行循环上运行的。)

或者,因为很明显这只是Box2D,也许有人可以从Box2D的环境中阐明这一点


问题的解决方法:

多亏了Knight,我们现在知道使用customAction“作为更新调用”与更新调用几乎相同:它发生在运行循环的第二阶段,即更新阶段之后


{如果你想让它真正发生在更新阶段,你需要使用SpriteKit中通常的解决方法-只需在游戏对象中调用你自己的更新函数,从,苹果在场景中提供的更新调用。}

所有动作都发生在更新周期的动作阶段


请参见

他们没有忘记在SKSpriteNodes中进行更新调用,精灵不需要更新方法。自定义动作在更新周期的动作阶段被调用:“自定义动作在更新周期的动作阶段被调用”一个很好的点,很好的一个(“精灵不需要更新方法”)你的评论是难以置信的老bean:考虑任何一个游戏引擎,在统一语言中:“更新”调用每个游戏对象是整个脚本概念存在的主要原因!编写坦克、子弹、马里奥或其他任何东西的程序就是编写更新调用。){当然,苹果有他们有趣且令人钦佩的“动作”概念,其中苹果“随着时间的推移为您执行某些操作”;但当然,对象,就像场景一样,需要访问运行循环。}更新方法是浪费CPU周期来调用不需要调用的函数。精灵工具包不是游戏引擎,精灵工具包是工具包。您有处理坦克、子弹和马里奥的操作,因此不需要有更新函数“更新方法是浪费CPU周期调用不需要调用的函数”?当然,你只在需要的时候使用它。苹果只是(无论出于何种原因)没有将其包含在>项目中,而只是sceneFantastic信息中。TBC您指的是“第二个”项目,标记为“SKScene评估动作”。因此,所有的
SKAction
都是在那里执行的。是的,你不能控制灰色区域中发生的事情,这都是幕后的,但正如你所看到的,你可以控制之前和之后,这对任何在这里搜索的人来说都是非常清楚的:如果我们在SKAction.customAction中添加一个东西,事实上,事情将在“秒”中执行图表中显示的段为蓝灰色,标记为“SKSCHERE评估动作”。请记住,SKAction.*customAction**是一个特别的系统,它让“您”每次都运行一些东西。(苹果的其他SKAction概念是,随着时间的推移,为你表演一些东西,比如说,一个特定的动作。)