2013-05-21 59 views
0

我已经实现了3个类。无法从Cocos2D中的另一个类访问函数

- 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

Everyti我,我点击屏幕,我得到这样的“感动屏幕”(被称为上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个木屐,一个BEFORE “我们即将getAmmo:”

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

,一次次 “我们gotTheAmmo:”

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); 
    } 

我只是在得到一个之前和之后的一个,还有在路上在没有警告的功能被调用但有些原因没有被调用。没有如果语句或任何..什么是我做错了吗?

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

谢谢你的时间,有一个好的。在我做这个scene.m

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

然后:

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

上Backgroundlayer

+1

我认为你将不得不发布一些更多的代码......这不是在您的'_hud'变量都应该向我都清楚被分配(是'_hud'无?)。在没有任何关于'getAmmo:magsLeft:'调用的上下文的情况下,很难说出还有什么可能导致呼叫不被执行。 –

+0

我已经分配了@property(strong)HUDLayer * hud;在顶部文件(我很抱歉,我刚才正在编辑该编辑..) – user1876553

+0

正如Aaron所说,我们需要更多的信息。至少,我们需要所有代码在其中分配/改变'_hud',调用'get Ammo'周围的行(至少在日志记录之前)以及'getAmmo'的代码。更好的是最小的整体代码,它重现了错误。 – Matthias

回答

0

在scene.h我添加了这个功能。M I变化规律与初始化

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

:d