无法从Cocos2D中的其他类访问函数

时间:2013-05-21 22:36:28

标签: ios xcode cocos2d-iphone

我已经实施了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下的属性: (我意识到这是零,因为它没有初始化,我如何初始化???)

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

因此,为了使问题更简单,如何从其他类访问属性/函数?

感谢您抽出宝贵时间,祝你有个好主意。

1 个答案:

答案 0 :(得分:0)

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

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

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

    _backgroundLayer = [[[BackgroundLayer alloc] initWithHUD:_hudLayer] autorelease];
在Backgroundlayer.m上

我用

更改了常规init
    -(id)initWithHUD:(HUDLayer *)hud{

:d