0

我已经实现了 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];

_hudScene.m这样说的:(及其导入的backgroundlayer.m

    HUDLayer *hudLayer = [HUDLayer node];
    [self addChild:hudLayer z:1];

背景是 z:0。

BackgroundLayer.m 在@interface 下也有属性:( 我意识到这是 nil 因为它没有初始化,我该如何初始化它???)

    @property (strong) HUDLayer *hud;

在 getAmmo 的调用之间:我做了 3 个 CLOGS,一个在“我们即将获得弹药:”之前

一个在 HUDLayer.m 上调用“Inside getAmmo:”的函数内部

还有一个在“我们得到了弹药:”之后

背景层.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语句或任何东西..我做错了什么???

所以为了让问题更简单,我如何访问其他类的属性/函数?

谢谢你的时间,祝你好运。

4

1 回答 1

0

在 scene.h 我添加了这个功能:

    -(id)initWithHUD:(HUDLayer *)hud;

然后在现场。我做了这个:

    _backgroundLayer = [[[BackgroundLayer alloc] initWithHUD:_hudLayer] autorelease];

在 Backgroundlayer.m 上,我将常规初始化更改为

    -(id)initWithHUD:(HUDLayer *)hud{

:D

于 2013-05-22T19:18:00.757 回答