2011-12-22 121 views
0

嗨,大家好,請誰能幫了這個錯誤:「訪問未知的生活的getter方法」我下面的代碼獲得一,二號線(CCSprite線)。訪問getter方法

GamePlayLayer.h是:

#import "cocos2d.h" 
#import "Box2D.h" 
#import "GLES-Render.h" 
#import <Foundation/Foundation.h> 


@class UILayer; 
@class Insect; 

@interface GamePlayLayer : CCLayer { 

b2World * world; 
GLESDebugDraw * debugDraw; 
CCSpriteBatchNode * sceneSpriteBatchNode; 
Insect * insect; 
b2Body *body; 
SceneUILayer * uiLayer; 
    double startTime; 
bool gameOver; 
bool gameWon; 
NSMutableArray *lives; 

} 

- (id)initWithUILayer:(UILayer *)sceneUILayer; 


@end 

GamePlayLayer.m

UILayer * sr = (UILayer *)[self.parent getChildByTag:10]; 
CCSprite * live = [sr.lives objectAtIndex:self.lives]; 
[live setVisible:NO]; 

奧萊特我不得不添加以下信息:

的UILayer.h(該UILayer是HUD層)文件是:

@interface UILayer : CCLayer { 

NSMutableArray *lives; 

    } 

@property (nonatomic,retain) NSMutableArray *lives; 

的UILayer.m是:

#import "UILayer.h" 
#import "GameManager.h" 


@implementation UILayer 


@synthesize lives; 

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


    lives = [[NSMutableArray arrayWithCapacity:3]retain]; 

    for(int i=0;i<3;i++) 
    { 
     CCSprite * life = [CCSprite spriteWithFile:@"life_Label.png"]; 
     [life setPosition:ccp(winSize.width/18+ 32*i,290)]; 
     [self addChild:life]; 
     [lives addObject:life]; 
    } 
    } 
+0

你應該在你聲明這個生命財產的地方包含你的頭像,'自我'在這裏。什麼是UILayer? – 2011-12-22 22:32:03

+0

@Firoze Lafeer我已添加更多代碼,希望其更清晰 – Zaki 2011-12-22 23:31:15

+0

GamePlayLayer.h呢? – 2011-12-23 00:23:35

回答

0

的方式,編譯器看到你的方法-setVisible是可見的一個屬性的設置方法。我猜這不是你想要的。嘗試將您的方法重命名爲[live visible:NO];或者除了-set之外的任何東西。

+0

對於以-add -copy或-new開頭的方法,您也會看到類似的問題。 – 2011-12-22 21:47:55

+2

這並沒有解決OP的問題。 – Caleb 2011-12-22 21:53:32

+0

@BillBrasky如果我將它設置爲可見,那麼我得到一個警告,CCSprite可能不會對-visible進行響應。 – Zaki 2011-12-22 22:03:04

0

你是否正在爲生命定義一個屬性?

例如在您的.h:

@interface blah 

// ... 

@property (assign) NSInteger lives; 

@end 

然後在您的m:

@implementation blah 

@synthesize lives = _lives; 

//your code 

@end 
+0

是的,我正在爲生活增加一個屬性。對不起,我沒有提到,但我的生活伊娃被定義爲NSMutableArray而不是NSInteger,即NSMutableArray *生活; – Zaki 2011-12-22 21:59:53

0

您可以:

  • 沒有@property int lives;在頭文件
  • 沒有@synthesize lives;在實現文件。
  • 具有livesint(或可轉換爲int)不同。

但這只是一個可憐的猜測與你提供的代碼片段。

+0

我有我的生活ivar作爲一個NSMutableArray,而不是一個int。 – Zaki 2011-12-22 22:30:46

+0

所以你已經知道這個問題了。 – Krizz 2011-12-22 22:33:07

+0

修正行'[sr.lives objectAtIndex:self.lives];' - 你傳遞了一個數組兩次? 'objectAtIndex:'接受一個整數索引。 – Krizz 2011-12-22 22:43:12