每次返回一个新对象时,都会覆盖Objective-c对象

时间:2014-05-08 16:19:06

标签: objective-c sprite-kit

我对Objective C很新。我有一个类PDScene : SKScene,它在PDEnemy : SKNode的新实例(或者我认为)中。这是删除了不相关行的代码:

PDScene.m

-(void)enemySpawn:(NSString*)name
{
    PDEnemy *enemy = [[PDEnemy alloc] initEnemyNamed:name intoScene:self];
    NSLog(@"%@", enemy);
    [_world addChild:enemy]; // _world is simply an SKNode
}

PDEnemy.m

-(id)initEnemyNamed:(NSString*)name intoScene:(PDScene*)scene
{
    if (self = [super init]) {
        NSLog(@"Init enemy '%@'", name);

        ... // build out SKSpriteNode, init actions, etc.
    }

    return self;
}

我遇到的问题是PDEnemy的其他实例会覆盖前一个实例。例如,如果我拨打[self enemySpawn:@"somEnemyName"] 5次,我可以在我的控制台中看到5组NSLog,但我屏幕上只有1 PDEnemy。如果我将enemySpawn:name更改为:

[_world addChild:[[PDEnemy alloc] initEnemyNamed:name intoScene:self]];

然后它按预期工作,我得到5个不同的PDEnemy s。我的代码中有很多地方,我有使用相同对象实例标识符的方法(例如laserbullet),并且它们不会在多个方法调用上相互覆盖,那么为什么呢发生在我的自定义课程?如果更多代码有用,请告诉我。这最终可能只是一个我忽视的小虫子,或者是对obj-c的更根本的误解。

0 个答案:

没有答案