我已经实施了3个课程。
- Scene.m & .h
Scene.m :(头文件上有HudLayer& BackgroundLayer属性)
-(id)init{
self = [super init];
if(self != nil){
//Level1Layer
_level1GameplayLayer = [Level1Layer node];
[self addChild:_level1GameplayLayer z:0];
//Hud Layer
_hudLayer = [HUDLayer node];
[self addChild:_hudLayer z:1];
}
return self;
}
- 哪个持有这2层
BackgroundLayer.m & .h
&& HUDLayer.m & .h
每当我点击屏幕时,我会收到一个日志通知,例如“触摸屏幕”(在backgroundlayer.m上调用),后跟一个在HUDLayer.m & .h
上实现的功能
我称之为:
[_hud getAmmo:self.ammoLeft magsLeft:self.magsLeft];
_hud
在Scene.m
上声明如下:(并在backgroundlayer.m
上导入)
HUDLayer *hudLayer = [HUDLayer node];
[self addChild:hudLayer z:1];
背景是z:0。
BackgroundLayer.m也有@interface下的属性: (我意识到这是零,因为它没有初始化,我如何初始化???)
@property (strong) HUDLayer *hud;
在getAmmo的调用之间:我做了3个CLOGS,之前有一个“我们即将得到的Ammo:”
在HUDLayer.m上调用“Inside getAmmo:”
还有一个“我们得到了TheAmmo:”
BackgroundLayer.m:
CCLOG(@"We're about to getAmmo");
_hud getAmmo:self.ammoLeft magsLeft:self.magsLeft];
CCLOG(@"We got the ammo:%d, mags:%d",self.ammoLeft,self.magsLeft);
HUDLayer.m:
-(void)getAmmo:(int)ammo magsLeft:(int)magsLeft
{
CCLOG(@"We did this");
hudMagsLeft=magsLeft;
hudAmmoLeft = ammo;
CCLOG(@"HUD MAGS: %d, AMMO:%d", hudMagsLeft,hudAmmoLeft);
}
我只获得前一个和后一个,在调用函数的方式上没有警告,但由于某种原因它没有被调用。没有if语句或任何东西......我做错了什么???
因此,为了使问题更简单,如何从其他类访问属性/函数?
感谢您抽出宝贵时间,祝你有个好主意。
答案 0 :(得分:0)
在scene.h上我添加了这个功能:
-(id)initWithHUD:(HUDLayer *)hud;
然后在现场。我做了这个:
_backgroundLayer = [[[BackgroundLayer alloc] initWithHUD:_hudLayer] autorelease];
在Backgroundlayer.m上我用
更改了常规init -(id)initWithHUD:(HUDLayer *)hud{
:d