私は Objective C の初心者で、C++ に慣れているため、混乱する可能性があります。私はiPhoneゲームを作っています。私がやりたいのは、すべての敵とヒーローを「登録」および「登録解除」するクラスを持つことです。敵とヒーローの個々のインスタンスをこのシングルトン クラスに渡し、そのオブジェクトを NSMutableArray に追加して、特定の各インスタンス内で関数を呼び出して変数を変更できるようにしたいと考えています (レジスタ ID に基づく for ループを使用して)。敵のオブジェクトのポインターを渡そうとすると、(壊れたistributer.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];
}
}
そして、これはエネミークラスからの呼び出しです
sharedDamageDistributer = [DamageDistributer sharedDamageDistributer];
[sharedDamageDistributer RegisterEnemy:self];
それで、私は何を間違っていますか?
編集済み: ああ、それは見落としていました...それ以上だと思っていた皆さんに感謝します。もう1つ質問です。変更可能な配列は、オブジェクトが配列から削除されるとインデックスをシフトするので、オブジェクトが削除された後にすべてのオブジェクト (registerID) をデクリメントする必要がありますか? それとも、インデックスをそのままにして、空白を埋めますか? または、何もシフトせずに最後に追加し続けますか? 再度、感謝します。