我在Objective C中相当新,可能会因为习惯于C++而感到困惑。我正在制作一款iphone游戏,而我想要做的就是让所有敌人和英雄们“注册”和“取消注册”。我想将敌人和英雄的每个单独实例传递给此单例类,然后将该对象添加到NSMutableArray中,并且能够调用函数并在每个特定实例中更改变量(通过使用基于其注册ID的for循环)。当我尝试传递敌方对象的指针并在论坛上查看时,我收到了一个它期望的类型(在damagedistributer.h中)的错误,似乎没有人回答这个问题。我怎么能做到这一点? 。不希望出现这种情况是在栈上,所以当我改变的变量我不会失去这些变化在此先感谢这里的对象的副本是一些代码:传递自己作为参数
DamageDistributer.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;
DamageDistributer.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];
}
}
然后这是来自En emy类
sharedDamageDistributer = [DamageDistributer sharedDamageDistributer];
[sharedDamageDistributer RegisterEnemy:self];
那么我做错了什么?
编辑: 哦哇忽略了......谢谢你们,我认为它不止于此。还有一个问题。当一个对象从数组中移除时,这个可变数组是否会移动索引,所以我将不得不减少所有对象(registerIDs)在被删除之后?或者不,它保持索引在哪里,它填补空白?或继续增加最终不移动任何东西?再次感谢。
如果类调用自身的类型AbstractEnemy的,这很好,不用担心。 –
切线:我相信ObjC约定是方法名称的'camelCase',而不是'PascalCase'。 – millimoose