【问题标题】:Cocos2d: Replaced scene is still activeCocos2d:替换的场景仍然活跃
【发布时间】:2012-12-12 10:22:36
【问题描述】:

我正在尝试处理 cocos2d,但遇到了问题。我会尽量简洁明了,我有一个包含 Level1.h 和 Level1.m 文件的场景 http://pastebin.com/BdZqpXBb 我的下一个场景:http://pastebin.com/1YPy0E9f 当我从 Level1.m 切换到下一个场景或主菜单时,似乎一切都发生了变化,我从 Level1.m 中看不到任何东西,但精灵仍然处于活动状态,并且在我触摸它们时播放声音。为什么会这样?我怎样才能杀死他们并删除?这是我的图层和场景逻辑或内存管理的问题吗?谢谢

【问题讨论】:

    标签: objective-c xcode cocos2d-iphone


    【解决方案1】:

    这是一个内存管理问题。你的场景已经泄露,它还没有被释放。也许您在某处保留了对它的强烈引用?

    所有这些变量,它们都放在大括号内的@interface 部分,而不是@implementation 下面。因为它们现在的方式使它们成为全局变量,而不是每个实例的变量。由于它们是全局的,因此这些变量所持有的引用不会在您更改场景时被释放。

    【讨论】:

    • 没什么帮助,我新建了一个项目,小一个(更容易阅读),两个场景,一个精灵,这是同样的问题,这是我的代码:HelloWorldLayer:pastebin.com/L7hZ7kvh 和其他场景:pastebin.com/y3XTNEhn
    • 我在 onExit 方法中添加了这一行: [[CCEventDispatcher sharedDispatcher] removeMouseDelegate:self];并且似乎有效
    • 如果我在 onExit 方法上写下这一行: [[CCEventDispatcher sharedDispatcher] removeMouseDelegate:self];在下一个场景中一切正常,但我无法按下任何菜单项,它们不起作用,但精灵可以。我还在我的 init 方法中插入了这一行: [[CCEventDispatcher sharedDispatcher] addMouseDelegate:self priority:[self mouseDelegatePriority]];有什么想法吗?
    猜你喜欢
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-12
    相关资源
    最近更新 更多