我对 Objective C 还很陌生,因为我习惯了 C++,所以可能会感到困惑。我正在制作一个 iphone 游戏,我想做的是让所有敌人和英雄“注册”和“取消注册”到一个班级。我想将敌人和英雄的每个单独实例传递给这个单例类,然后将对象添加到 NSMutableArray 并能够调用函数并更改每个特定实例中的变量(通过使用基于它们的 registerID 的 for 循环)。当我试图传递一个敌方对象的指针并在网上查看论坛似乎没有人回答这个问题时,我收到一个错误,它需要一个类型(在损坏的istributer.h 中)。我怎样才能做到这一点?我不想要堆栈上的对象的副本,因此当我更改变量时,我不会丢失这些更改。提前致谢。
损害分配器.h
@interface DamageDistributer : NSObject {
GLuint enemyRegisterID;
GLuint heroRegisterID;
NSMutableArray *enemies;
NSMutableArray *heros;
}
- (void)RegisterHero:(Player*)playerHero; //PROBLEM HERE
- (void)RegisterEnemy:(AbstractEnemy*)enemyUnit; //PROBLEM HERE
- (void)Unregister:(GLuint)registerID type:(GLuint)typeOfEntity;
+ (DamageDistributer*)sharedDamageDistributer;
损害分配器.m
- (void)RegisterHero:(Player *)playerHero {
[heros addObject:playerHero];
playerHero.damageDistID = heroRegisterID;
heroRegisterID++;
}
- (void)RegisterEnemy:(AbstractEnemy *)enemyUnit {
[enemies addObject:enemyUnit];
enemyUnit.damageDistID = enemyRegisterID;
enemyRegisterID++;
}
- (void)Unregister:(GLuint)registerID type:(GLuint)typeOfEntity {
if (typeOfEntity == hero) {
[heros removeObjectAtIndex:registerID];
}
else {
[enemies removeObjectAtIndex:registerID];
}
}
然后这是敌人班的电话
sharedDamageDistributer = [DamageDistributer sharedDamageDistributer];
[sharedDamageDistributer RegisterEnemy:self];
那么我做错了什么?
编辑:哦,哇忽略了...谢谢大家,我认为这不仅仅如此。还有一个问题。一旦从数组中删除一个对象,可变数组是否会移动索引,所以我必须在删除一个对象后减少所有对象(registerID)?还是不将索引保留在原处并填充空白?还是不断添加到最后而不改变任何东西?再次感谢。