【问题标题】:Why is the value of variable different when using CCLog and using print in debug mode?为什么在调试模式下使用CCLog和使用打印时变量的值不同?
【发布时间】:2014-01-11 10:14:55
【问题描述】:

至少玩过一次关卡后,我的游戏中的力量条无法正常工作。所以我写了一个方法,使用CCLog来注销一些变量,并在update:方法中调用这个方法。而且我还设置了一个断点,当出现这个问题时它会进入 Xcode 的调试模式,然后我使用 print 来检查变量。但是,使用 CCLog 和使用打印命令之间的值似乎不同。这是一个解释一切的屏幕截图。

这是我的截图:

它是否与多线程有关(我对此一无所知)?我检查了每个记录变量的声明,以确保它们没有使用相同的名称多次声明。

【问题讨论】:

  • 尝试在consumeStrength 内调用[self cclogStrength]。我很确定这些值将是相同的。
  • 我试过 [self cclogStrength],你是对的。值是相同的。这和放出上次玩的关卡场景有关系吗?测试流程为: 1 运行游戏 2 选择关卡场景 3 玩关卡 4 赢,回到关卡场景 5 再玩关卡。它有时只出现在第 5 步。
  • 我再次测试,发现Gamelayer场景的_strengthbar和包含错误的strengthbar的内存地址不同。但是正确的时候(第一次玩),两个地址是一样的。
  • 我现在确定旧关卡场景没有正确发布。所以每次触摸都会被两个场景接收。这个问题似乎与CCBReader有关。我不知道我能做些什么,因为我正在使用 ARC。

标签: objective-c c xcode cocos2d-iphone


【解决方案1】:

好的,问题解决了。

当我写一些委托时,我使用了“强”,这会导致一些保留周期。现在我将它们全部更改为 Weak,并将部署设置更改为 iOS 5(或更高版本)。

变量的值不同的原因是因为在CCLog中,该值属于新场景,但是由于保留循环,同时有多个场景接收我的触摸。 XCode 或 Cocos2d 或 CCBReader 没有错:-p

希望这个答案对其他人有所帮助。非常感谢@Cy-4AH。

【讨论】:

    【解决方案2】:

    因为它是在打印后更改的。在断点中,您正在查看新值。

    【讨论】:

    • 打印和中断之间可能只有 1/60 的时间。我想一定有什么问题。很奇怪,这个关卡玩一次就不会出现这个错误,即使玩了很多次,也不会总是出现。这真的让我发疯。
    猜你喜欢
    • 2019-07-01
    • 2018-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2013-01-26
    • 2011-01-05
    • 1970-01-01
    相关资源
    最近更新 更多