为什么要使用未声明的标识符?

时间:2014-01-01 01:03:16

标签: ios objective-c

为什么我的代码说我在shootAt中使用了'英雄'的未声明标识符,从最后的第四行开始。

#import "GameplayLayer.h"
#import "Ship.h"
#import "MainCharacter.h"
#import "GameOverLayer.h"
int screenHeight;
int screenWidth;
@implementation GameplayLayer


-(id) init
{
    if ((self = [super init]))
    {
        screenHeight = [[CCDirector sharedDirector] screenSize].height;
        screenWidth = [[CCDirector sharedDirector] screenSize].width;
        MainCharacter * hero = [[MainCharacter alloc] init];
        [self addChild: hero];
        hero.position = ccp(screenWidth/2, screenHeight/10);
        Ship * ship1 = [[Ship alloc] init];
        [self addChild: ship1];
        numEnemies++;
        ship1.position = ccp(screenWidth/2, screenHeight/2);
    }
    return self;
    [self scheduleUpdate];
}

-(void) update: (ccTime) dt
{

    KKInput * input = [KKInput sharedInput];
    CGPoint touchPosition = [input locationOfAnyTouchInPhase:KKTouchPhaseBegan]; 
    if (touchPosition.x != 0.0 || touchPosition.y != 0.0)
    {
        [hero shootAt: ccp(screenWidth/2, screenHeight)];
    }
}    
@end

2 个答案:

答案 0 :(得分:3)

因为hero是在构造函数中定义的局部变量,因此在其他方法中不可见。

答案 1 :(得分:-4)

我认为这是变量范围的问题,你声明了         的英雄 在你的         初始化方法 并尝试访问此变量        更新方法(因此,英雄是init方法的局部变量,未申请更新方法)。

更新你的代码像这样,如果你想要一个全局访问 英雄对象,

    int screenHeight;
    int screenWidth;
    MainCharacter * hero;

然后在init方法中初始化它,并在同一类的所有其他方法中访问它。