2012-03-09 2 views
0

이것은 매우 간단한 질문이지만, 나는 그걸로 정말로 힘든 시간을 보내고 있습니다.메서드에 전달하지 않고 특정 CCSprite를 가리키는 방법은 무엇입니까?

int 변수를 취하는 메소드를 만들었습니다. 그것으로 CCSprite를 사용하여 작업을 수행해야합니다.

예를 들어이 코드를 [_hud hideThisActionLed:2];이라고 부르고 actionLed2라는 CCSprite를 숨겨야합니다.

특정 스프라이트에 액세스 할 수없는 다른 클래스에서 호출하기 때문에 실제 CCSprite를 메서드에 전달할 수 없습니다.

이 스프라이트 이름을 [NSString stringWithFormat:@"actionLed%d", actionLedNumber]으로 만들 수는 있지만 지정된 CCSprite를 가리키는 방법을 사용할 수 없습니다.

는 여기에 내가 HUD 클래스의 스프라이트를 선언하는 방법은 다음과 같습니다

actionLed1 = [CCSprite spriteWithFrameName:@"actionLed1.png" setScale:TRUE resetAnchor:TRUE]; 
[actionLed1 setOpacity:0]; 
[self addChild: actionLed1 z:11 tag:1]; 

그 4 개의 LED에 대한 X4.

+0

이들은 정상적인 CCSpri입니다. 내가 다른 클래스에서 선언 한 tes ('[hud hideThisActionLed : 2]; '라고 부르는 클래스). 건강 정보, 회전 횟수 등을 보여주는 HUD의 새로운 클래스입니다. – Liuhu

+0

스프라이트에 액세스하는 데는 여러 가지 방법이 있습니다. 질문을 편집하고이 스프라이트를 선언하고 추가하는 데 사용하는 코드를 게시 할 수 있습니까? – sch

답변

1

이 다른 LED를 액세스 할 수있는 방법에 따라 달라집니다. 그들은 클래스 내부 속성 인 경우

, 당신은 다음과 같이 액세스 할 수 있습니다 : 그들은 배열에 저장되어있는 경우

NSString *actionLedName = [NSString stringWithFormat:@"actionLed%d", actionLedNumber]; 
CCSprite *actionLed = [self valueForKey:actionLedName]; 

는, 다음과 같이 액세스 할 수 있습니다 :

CCSprite *actionLed = [self.actionLeds objectAtIndex:actionLedNumber]; 

추가 할 때 각 액션에 대한 태그를 설정 한 경우 다음과 같이 액세스 할 수 있습니다.

CCSprite *actionLed = [self getChildByTag:actionLedNumber]; 
+0

첫 번째 방법이 효과적입니다. 고맙습니다! 두 번째는 "호환되지 않는 포인터 유형이 'CCNode *'유형의 표현식으로 'CCSprite *'를 초기화한다는 것입니다. – Liuhu

0

레이어에 CCSprite 객체를 추가 할 때 withTag 옵션을 사용하십시오. 그런 다음 hideThisActionLed 메서드에 전달한 숫자 인 태그 번호로 스프라이트를 참조 할 수 있습니다.

[_hud addChild:ledSprite withTag:1]; [_hud addChild:ledSprite2 withTag:2]; 등 ...

-(void)hideThisActionLed:(int)ledNum { 
CCSprite *theSprite = [_hud getChildByTag:ledNum]; 
... hide the sprite ...