【问题标题】:Inheriting CCSprite in Cocos2d-iPhoneCocos2d-iPhone继承CCSprite
【发布时间】:2026-01-05 16:45:01
【问题描述】:

我已经准备好很多地方告诉我我不应该继承 CCSprite 类,而应该将精灵作为成员变量添加到我的类中。

这是我所做的: 创建了一个 CCNode 类, 在我的节点类中添加了一个 CCSprite 变量, 初始化我的精灵并将其作为子节点添加到我的节点。

我现在有一个 CCLayer,我想在其中绘制这些精灵,但是当我将我的节点添加为子节点时,什么都没有绘制。如果我将节点精灵添加为子节点而不是它将绘制的节点。

我的问题是,有没有办法让我的精灵通过将节点作为子节点添加到图层中进行绘制,或者添加精灵是唯一的方法?

我是 Objective-c 和 iPhone 开发的新手,因此我们将不胜感激。

编辑 这是我的 CCNode 类 - animalSprite 是我的 CCSprite。

    @implementation Animal

    @synthesize animalSprite = _animalSprite;

    -(Animal *) initWithFile:(NSString *)texture position:(CGPoint) position
    {
        self.animalSprite = [CCSprite spriteWithFile:texture];
        self.animalSprite.position = position;
        self.animalSprite.scale = 0.25f;
        [self addChild:self.animalSprite];

        return self;
    }

    -(void) dealloc{

        [super dealloc];
    }

@end

现在在我的 CCLayer 类中,我有一个包含节点列表的级别变量。

//Load Level
Level *level = [LoadLevel loadLevel];

for (Animal *animal in level.animals)
{
    [self addChild:animal];
}

编辑我创建了我的节点对象,然后通过以下方式将它们添加到级别类中的数组中。

Animal *animal = [[[Animal alloc] initWithFile:animalFileName position:position] autorelease];
[level.animals addObject:animal];

【问题讨论】:

    标签: iphone objective-c inheritance cocos2d-iphone


    【解决方案1】:

    尝试阅读此主题http://www.cocos2d-iphone.org/forum/topic/11566

    希望您在使用精灵之前遇到同样的问题。

    干杯,

    塔兹

    最新游戏连锁:http://www.silverbacktechsol.co.uk/stschained.html

    【讨论】:

    • 好吧,本文建议不要从 CCNode 继承,而是从 NSObject 继承,然后将精灵添加到图层。我想这是有道理的,但如果我想从图层中检索孩子,我只会得到精灵而不是 NSObject 对吗?
    • 我也看不到我的代码中的任何地方我的父类可能会释放它的孩子,所以我认为这不是问题。
    • 您不需要在精灵初始化块周围添加以下内容吗? if ((self=[super init]) ) { } 试试看能不能解决问题。根据我的经验,如果您将对象子类化,则需要先调用父级初始化。 PS我不在我的Mac上,所以我自己无法尝试,我只是从记忆中记住;-)
    • 啊,我知道这将是我错过的一些简单的事情。非常感谢:)