【问题标题】:Cocos2D: Sprites fail to be removed when adding them with a class methodCocos2D:使用类方法添加精灵时无法移除精灵
【发布时间】:2012-04-23 22:36:27
【问题描述】:

在我在另一个类中的方法声明中,我传递了一个 CCLayer 指针,其中添加了 sprite 以及一个 sprite 和 spritesheet 指针:

+(void) toggleSeedSelectionScreen:(CCLayer*)layer 
                   withSeedSprite:(CCSprite*)seedSprite
              withSeedSpriteSheet:(CCSpriteBatchNode*)seedSpriteSheet;

在我的 .m 中的 toggleSeedSelectionScreen 方法中,我添加了 spritesheet 和 sprite,如下所示:

[seedSpriteSheet addChild:seedSprite];
[layer addChild:seedSpriteSheet z:14];

这很好用。看起来很奇怪的是,当在我的 CCLayer(层)中调用一个方法来删除 seedSpriteSheet 时,什么也没有发生。

[self removeChild:seedSpriteSheet cleanup:YES];

当类方法曾经是层中的方法时,它工作得很好。有什么明显的原因吗?

似乎添加到图层后,在控制台中输入po seedSprite并不知道它是父对象。

【问题讨论】:

  • 你试过设置断点并单步执行 cocos2d 库中的代码吗? (顺便说一句:这是开源库的众多光荣好处之一!)
  • "当类方法以前是层中的方法时,它工作得很好。??????"我无法理解这个......请详细说明.. 通常这个 self 表示您制作的图层类的对象.. 所以如果它是一个类方法。这个自我将代表你的班级。类不是精灵表的父级。你的类对象是父对象。
  • Nikhil:我的方法曾经与具有更新方法的主 CCLayer 属于同一类。现在,为了让我的主 CCLayer 中的内容看起来更干净,该方法现在位于不同的类中。
  • HachiEthan:我尝试了一点,但我会继续做侦探工作,谢谢。
  • 我猜事情是 spriteSheet 被添加到某些东西,我只是不知道是什么,我不知道为什么它不应该是我指向 self 的 CCLayer在我的主要 CCLayer 类中。

标签: class methods cocos2d-iphone sprite


【解决方案1】:

试试[seedSpriteSheet removeFromParentAndCleanup:YES];

编辑:您说当您将其更改为层上的实例方法时它起作用了..所以为什么不做这样的事情:[[[myobject alloc]init] <instance method> ];。我知道它有效,因为我用过它

【讨论】:

  • 不起作用。那不应该是seedSprite而不是seedSpriteSheet吗?但是seedSprite 也不起作用。
  • 你知道我不明白什么吗?你为什么要为此使用类方法?
  • skytz:我想让我的主 CCLayer 类更小,以便更易于阅读,并且发送到类方法的许多对象指针在我的主 CCLayer 中引用了一堆,所以我把它们留在身边。您有更好的方法吗?
  • 在实例方法中我应该在添加孩子时调用 layer 或 self 吗?当我调用 self 时,我在屏幕上看不到任何内容,当我调用 layer 时,我看到了它,但是当它调用方法来删除它时,它并没有像类方法一样删除。在 CCMenuItemImage 目标上,我发现我需要使用 layer 因为我使用 self 它会崩溃,因为它是 nil。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多