【问题标题】:Issues with SKActionSKAction 的问题
【发布时间】:2015-12-31 13:07:22
【问题描述】:

顶部功能有效。我有一个 5 x 5 的板,虽然一个数组包含 100 个,但我需要继续生成要放置在板上的块。最小的检查将板上的最小数字存储为最小的,仅使该块可点击。我想随着时间的推移生成块,第二个功能是我尝试过的方法,但只是让应用程序崩溃。

func generateAndCheckBlocks() {

    while smallestArr.contains(100){
        if placeBlocks() == true {
            checkSmallest()
        }
    }
}

func generateAndCheckBlocks() {

    let wait = SKAction.waitForDuration(1)
    let run = SKAction.runBlock {
        if self.placeBlocks() == true {
            self.checkSmallest()
        }
    }

    while smallestArr.contains(100){
        runAction(SKAction.sequence([run, wait]))
    }
}

【问题讨论】:

  • 怎么去掉100?等待不会暂停你的 while 循环,所以在 1 秒内,谁知道发生了什么
  • 我将 100 的位置替换为在 placeblocks 中随机创建的数字。您是说问题是while循环不会暂停以完成runaction?我认为它必须完成才能在包含时再次运行?
  • 你在模拟器上测试了吗? runAction 不应该是立即的,它会在更新循环期间进行处理,而您永远不会到达,所以现在您正在添加数百万个操作并最终耗尽内存,因为您永远不会离开循环来完成更新
  • 是的,我在我的手机上运行它并且它爆炸了。关于我应该改变什么以便随着时间的推移正确放置块的任何想法?
  • 我有一个充满数字 100 的数组,如果数组包含 100,这意味着游戏板上还有点,因为我生成的数字在 1-50 之间。

标签: swift skaction


【解决方案1】:

您采用的方法多么奇怪,您可能遇到比您想象的更大的问题,但我认为这是一种学习体验,所以...

当您的游戏需要开始创建块时,不要使用 while 循环,只需执行以下操作:

//Only call this once, not in a loop
func generateBlocks() {

    let wait = SKAction.waitForDuration(1)
    let run = SKAction.runBlock {
        if self.placeBlocks() == true {
            self.checkSmallest()
        }
    }
    self.runAction(SKAction.repeatActionForever(SKAction.sequence([run, wait])), withKey:"blocks");


}

然后,您可以在更新循环中执行此操作:

if(!smallestArr.contains(100))
{
    self.removeActionForKey("blocks")
}    

【讨论】:

  • 这成功了!如果我有 15 个声望,我会投赞成票。非常感谢你,我已经为此工作了好几天了。
  • 老实说,我什至认为您不需要数组,您可能也想尝试摆脱它
猜你喜欢
  • 1970-01-01
  • 2014-12-10
  • 1970-01-01
  • 2014-08-21
  • 2016-06-14
  • 2018-01-27
  • 1970-01-01
  • 2015-12-05
  • 1970-01-01
相关资源
最近更新 更多