我对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。我的代码中有很多地方,我有使用相同对象实例标识符的方法(例如laser
,bullet
),并且它们不会在多个方法调用上相互覆盖,那么为什么呢发生在我的自定义课程?如果更多代码有用,请告诉我。这最终可能只是一个我忽视的小虫子,或者是对obj-c的更根本的误解。