나는 Gamehud
에 개체의 이름을 표시하고 싶습니다. 메인 씬에 많은 오브젝트/스프라이트가 있는데, 내가하려고하는 것은 Gamehud
에 선택한 (터치로) 오브젝트 이름을 표시하는 것입니다.CChrite 또는 CCNode, Cocos2d에서 gamehud를 업데이트하는 방법
문제 Gamehud
을 CCsprite
클래스에 할당하면 새 인스턴스가 생성되고 현재 Gamehud
은 업데이트되지 않습니다. GameHUD *gamehud= (GameHUD *)[self.parent getChildByTag:99];
과 같은 것을 사용하면 GameHud 클래스에 객체를 보낼 수 없습니다.
그럼 ccsprite or ccnode
클래스의 게임 허드를 업데이트하는 올바른 방법은 무엇입니까?
메인 장면; 객체 클래스에서
-(id) init
{
if ((self = [super init]))
{
gameHud = [GameHUD gamehud];
[self addChild:gameHud z:2 tag:99];
}
}
내 GameHud
+(id) gamehud
{
return [[self alloc] init];
}
-(id) init
{
if ((self = [super init]))
{
//bunch of labels
}
}
-(void)showName: :(Object *)obj
{
NSLog(@"Object name is %@", obj.name);
[_labelSpeed setString:obj.name];
}
: CCSprite 모든
-(void) onTouch
{
//obj is the object with name property that I want to use
GameHUD *gamehud= (GameHUD *)[self.parent getChildByTag:99]; // does not send the obj to gamehud and showName is not called
//GameHud *gamehud= [GameHud alloc] init]; // this displays nslog but doesnt update _label
[gamehud showName:obj];
}
아마도 해당 CCSprite 객체에 대한 대리자 메서드를 만들 수 있습니다. 그것이 선택되었을 때 불이났다. 그런 다음 주요 장면에서 객체 이름을 가져오고'[gameHud showName : objectName]'을 호출하십시오. – mkral
당신은 분명히 객체 내부에서 허드를 설정하고 싶지는 않습니다. – mkral
또 다른 옵션은 mainScene에서 어떤 서브 뷰가 터치되었는지 확인한 다음 거기에서 확인하는 것입니다. – mkral