为什么我的代码说我在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
答案 0 :(得分:3)
因为hero
是在构造函数中定义的局部变量,因此在其他方法中不可见。
答案 1 :(得分:-4)
我认为这是变量范围的问题,你声明了 的英雄强> 在你的 初始化方法 并尝试访问此变量 更新方法(因此,英雄是init方法的局部变量,未申请更新方法)。
更新你的代码像这样,如果你想要一个全局访问 英雄对象,
int screenHeight;
int screenWidth;
MainCharacter * hero;
然后在init方法中初始化它,并在同一类的所有其他方法中访问它。