【问题标题】:Presenting SKScene BAD ACCESS crash呈现 SKScene BAD ACCESS 崩溃
【发布时间】:2014-08-12 12:57:38
【问题描述】:

我正在用 SpriteKit 构建一个相当简单的游戏。这是我第一次使用 SpriteKit,到目前为止一切顺利。现在我想在玩家完成游戏时呈现一个新的 SKScene。我遇到了似乎无法诊断的错误访问崩溃。

我认为我正确地呈现了场景:

UnlockRockets *scene = [[UnlockRockets alloc] initWithSize:self.scene.size];
[self.view presentScene:scene];

每次我在 presentScene 上收到以下错误:line - Thread 1: EXC_BAD_ACCESS (code=1, address = 0x10)

查看线程跟踪,似乎崩溃可能源自 [SKNode isPaused]

任何建议都会很棒,我完全迷失了这个建议。

【问题讨论】:

  • 我猜你的问题不是如何你展示你的SKScene,而是在哪里。什么方法调用该代码?
  • 我在 didBeginContact 函数中调用它,这不是调用它的最佳位置吗?
  • 只要确保你做对了:UnlockRockets 场景应该是你游戏中的其他屏幕,对吧?如果是这样,那么它应该工作。也许你在UnlockRockets 场景中有问题。
  • 试试这个:SKScene *scene = [[UnlockRockets alloc] initWithSize:self.size];
  • 试过了,不幸的是仍然没有运气。

标签: ios sprite-kit exc-bad-access skscene sknode


【解决方案1】:

我认为 UnlockRockets 类中的 initWithSize 方法存在问题

【讨论】:

  • 我已经注释掉了 initWithSize 方法中的所有内容,除了设置背景颜色来检查这一点。它仍然崩溃。
【解决方案2】:

我在使用 SKView 当前场景时遇到了同样的问题,即使场景是完全新的,没有任何配置。所以我就用这个解决了。

    myScene *newScene = [myScene sceneWithSize:size];
    newScene.scaleMode = SKSceneScaleModeResizeFill;
    SKView *currentskView = (SKView*)  self.scene.view;
    SKScene *currentScene = (SKScene*) self.scene;
    [currentScene removeAllChildren];
    [currentScene removeFromParent];
    [currentskView presentScene:newScene];

我还注意到,如果为场景声明强引用 - 它的工作方式与您一样,但在这种情况下,即使场景不可见,场景也会存在于内存中,并且 xCode 会通知存在内存警告。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多