【发布时间】:2012-12-20 19:45:06
【问题描述】:
我有一个Gamehud,我想在其中显示一个对象的名称。主场景中有很多对象/精灵我想做的是在Gamehud 上显示选定(触摸)对象的名称。
问题是如果我在CCsprite 类中分配Gamehud,它会创建新实例并且不会更新当前Gamehud。如果我使用 GameHUD *gamehud= (GameHUD *)[self.parent getChildByTag:99]; 之类的东西,我无法将对象发送到 GameHud 类。
那么在ccsprite or ccnodeclass 中更新游戏界面的正确方法是什么?
主场景;
-(id) init
{
if ((self = [super init]))
{
gameHud = [GameHUD gamehud];
[self addChild:gameHud z:2 tag:99];
}
}
我的游戏界面
+(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] -
你肯定不想从对象内部设置 hud。
-
另一种选择是检查 mainScene 中哪些子视图被触摸,然后在那里进行。
标签: objective-c ios xcode cocos2d-iphone ccsprite