2012-10-27 63 views
0

我在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)在被删除之后?或者不,它保持索引在哪里,它填补空白?或继续增加最终不移动任何东西?再次感谢。

+0

如果类调用自身的类型AbstractEnemy的,这很好,不用担心。 –

+1

切线:我相信ObjC约定是方法名称的'camelCase',而不是'PascalCase'。 – millimoose

回答

3

看起来像标题不知道播放器和AbstractEnemy。你可以导入这两个头文件,或者只添加@class(前向声明),它告诉编译器有一个类名称。那么你当然导入DamageDistributer

@class Player; 
    @class AbstractEnemy; 
    @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; 
1

实施中的头,我认为它没有在头识别您的自定义类。声明添加到您的.h文件中,如:

@class Player; 
@class AbstractEnemy; 
1

在Objective-C的一切(与基本的C类型如int,严格等除外)在堆上。所有对象都在堆上,并使用引用计数(如智能指针)进行内存管理。

你的错误是无关的这虽然,这可能是你只是未能#import "Player.h"