我有一個Gamehud
我想顯示對象的名稱。主場景中有很多對象/精靈,我試圖做的是在Gamehud
上顯示選定的(接觸)對象的名稱。如何在CCSprite或CCNode中更新gamehud,Cocos2d
問題是如果我在CCsprite
分配Gamehud
類它創建新的實例,並不會更新當前Gamehud
。如果我使用類似GameHUD *gamehud= (GameHUD *)[self.parent getChildByTag:99];
的東西,則不會發生任何事情,我無法將該對象發送給GameHud類。
那麼在ccsprite or ccnode
類中更新遊戲hud的正確方法是什麼?
主場景;
-(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
你絕對不想從對象內部設置hud。 – mkral
另一種選擇是檢查哪些子視圖在mainScene中被觸摸,然後在那裏執行。 – mkral