나는 Objective C에서 상당히 새롭고 C++에 익숙하기 때문에 혼란 스러울 수 있습니다. 나는 아이폰 게임을 만들고 있는데, 내가하고 싶은 일은 모든 적과 영웅이 "등록"하고 "등록 해제"하는 클래스를 갖는 것입니다. 적과 영웅의 각각의 인스턴스를이 싱글 톤 클래스에 전달한 다음 NSMutableArray에 객체를 추가하고 각 특정 인스턴스 내에서 함수를 호출하고 변수를 변경할 수 있어야합니다 (registerID를 기반으로 for 루프를 사용). 아무도이 질문에 대답하는 것 같지 않은 적 개체의 포인터를 전달하려고 시도 할 때 오류가 발생했습니다. "(damageistributer.h에 있음). 어떻게이 작업을 수행 할 수 있습니까? ..매개 변수로 self 전달하기
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)를 감소시켜야합니까? 아니면 인덱스를 유지하고 공백을 채 웁니 까? 아니면 아무것도 바꾸지 않고 끝까지 계속 추가할까요? 다시 한번 감사드립니다.
에 실패하고 수, 그것은 괜찮습니다, 그것에 대해 걱정하지 마십시오. –
Tangent : ObjC 컨벤션은'PascalCase'가 아니라 메소드 이름에 대해'camelCase'라고 생각합니다. – millimoose