2013-09-10 39 views
1

我當前正在嘗試訪問另一個文件上的函數(更精確的說是另一個層)。不存在功能

兩個圖層都在場景中。

第三層是試圖從第一層的功能...

這裏的IM如何這樣做:

這是我在現場scene.h

#import "firstLayer.h" 
#import "secondLayer.h" 
#import "thirdLayer.h" 

@interface myScene : CCScene 
{ 
// custom instance vars here... 
} 
@end 

以下是我投我在場景中的場景

-(id)init { 
self = [super init]; 
if(self != nil){ 

firstLayer *firstLayerz = [firstLayer node]; 
    [firstLayerz setTag:111]; 
    [self addChild:firstLayerz z:0]; 


    secondLayer *secondLayerz = [secondLayer node]; 
    [secondLayer setTag:112]; 
    [self addChild:secondLayer z:2]; 


    thirdLayer *thirdLayerz = [thirdLayer node]; 
    [thirdLayerz setTag:113]; 
    [self addChild:thirdLayerz z:4]; 

下面是我如何在thirdLayer.m中投射函數

#import "scene.h" 

@implementation thirdLayer.m 

-(id)init { 
self = [super init]; 
if(self != nil){ 

    firstLayer* firstLayerz = (firstLayer*)[self.parent getChildByTag:111]; 

    [firstLayerz functionNeeded]; 

} 

這裏的functionNeeded在firstLayer.m(右下方的init(

-(void)functionNeeded { 
NSLog(@"inside fnnction needed"); 
} 

過程中,日誌不顯示的...

我做firstLayer.h

適當的投
@interface firstLayer : CCLayer { 

} 


-(void)functionNeeded; 


@end 

謝謝你的時間和幫助!

+3

哪一部分是C++? –

+1

是首先Layerz零?如果是這樣,請檢查self.parent是包含第一層而不是其他節點的節點(也許是自己) – LearnCocos2D

+0

我想你會從self.parent得到錯誤類型的對象 –

回答

1

在你firstLayer的init方法寫

self.tag = 111; 

現在您的ThirdLayer要調用第一層寫的方法:

CCScene *current = [[CCDirector sharedDirector] runningScene]; 
if (current) { 
    id layer = [current getChildByTag:111]; 
    if (layer) { 
     [layer functionNeeded]; 
    } 
} 
+0

你會推薦一次作爲一個globalClass變量,或者每次我調用它時都這麼做嗎?(如果我多次調用它,你會推薦它嗎?)我現在就去嘗試一下。 – user2766367

+0

我試過你告訴我的,如果沒有發生,我在每個內部做了一個Log。我做了一個記錄當前和返回空值。 我在firstLayer初始化方法中添加了self.tag .....如果它有幫助,我的scene.h沒有任何內部接口或外部哈哈 – user2766367

+0

請問您可以使用您的類的層次更新這些問題嗎?只有.h文件,如果可能的話.m文件也是如此。 – Renaissance