2013-02-13 2 views
0

Мой GameScene.m файл:Метод экземпляра Cocos2d 2.0 не найден; приемник является прямым класс

#import "GameScene.h" 

// Needed to obtain the Navigation Controller 
#import "AppDelegate.h" 

#pragma mark - GameScene 

// GameScene implementation 
@implementation GameScene 

// on "init" you need to initialize your instance 
-(id) init 
{ 
self = [super init]; 
if (self != nil) 
{ 
    [self addChild:[GameLayer node]]; 
} 
return self; 
} 


- (void) dealloc 
{ 
[super dealloc]; 
} 

@end 
@implementation GameLayer 
@synthesize hero; 

-(id) init 
{ 
if((self=[super init])) 
{ 
    hero = [[Hero alloc] initWithGame:self]; 
} 
return self; 
} 

-(void) dealloc 
{ 
[super dealloc]; 
} 

@end 

Мой GameScene.h файл:

#import <GameKit/GameKit.h> 

// When you import this file, you import all the cocos2d classes 
#import "cocos2d.h" 

// GameScene 
@interface GameScene : CCScene 
{ 
} 

@end 

@class Hero; 

@interface GameLayer : CCLayer 
{ 
Hero * _hero; 

NSMutableArray * _bullets; 
bool _playerFiring; 

NSMutableArray * _enemies; 
float _lastTimeEnemyLaunched; 
float _enemyInterval; 

int _score; 
int _lives; 
int _bombs; 
int _level; 
} 

@property (nonatomic,retain) Hero * hero; 
@property (nonatomic,readwrite) bool playerFiring; 
@property (nonatomic,readwrite) float lastTimeEnemyLaunched; 
@property (nonatomic,readwrite) float enemyInterval; 
@property (nonatomic,retain) NSMutableArray * enemies; 
@property (nonatomic,retain) NSMutableArray * bullets; 
@property (assign,readwrite) int score; 
@property (assign,readwrite) int lives; 
@property (assign,readwrite) int bombs; 
@property (assign,readwrite) int level; 

@end 

Мой Hero.h файл:

#import <Foundation/Foundation.h> 
#import "cocos2d.h" 
#import "GameScene.h" 

@class GameLayer; 

@interface Hero : CCNode 
{ 
CCSprite * mySprite; 
GameLayer * theGame; 
float _lastTimeFired; 
float _fireInterval; 
float _firingSpeed; 
float _movementSpeed; 
} 

@property (nonatomic,retain) CCSprite * mySprite; 
@property (nonatomic,retain) GameLayer * theGame; 
@property (nonatomic,readwrite) float lastTimeFired; 
@property (nonatomic,readwrite) float fireInterval; 
@property (nonatomic,readwrite) float firingSpeed; 
@property (nonatomic,readwrite) float movementSpeed; 

@end 

И мой герой. м файл:

#import "Hero.h" 

@implementation Hero 

@synthesize theGame,mySprite; 

-(id) initWithGame:(GameLayer *)game 
{ 
self = [super init]; 
if(self != nil) 
{ 

    // ask director for the window size 
    CGSize size = [[CCDirector sharedDirector] winSize]; 

    self.theGame = game; 
    mySprite = [CCSprite spriteWithFile:@"hero.png"]; 
    [theGame addChild:mySprite z:2]; 
    [mySprite setPosition:ccp(size.width/2,50)]; 

    self.lastTimeFired = 0; 
    self.fireInterval = 3; 
    self.firingSpeed = 10; 
    self.movementSpeed = 5; 

} 
return self; 
} 

-(void) dealloc 
{ 
[super dealloc]; 
} 

@end 

И вот моя проблема: я получаю два предупреждения - 1. «instance method -initWithGame не найден (тип возврата по умолчанию -« id »)» и 2. «Receiver« Hero »- это класс вперед, а соответствующий @interface может не существовать "

Я попытался добавить" - (id) initWithGame: (GameLayer *) игра "line to hero.h interface", но это не сработает. Я попытался добавить эту строку, но с + вместо -, но ничего.

В конце концов, без моего героя отображается на экране. Кто-нибудь знает, как решить эту проблему (я использую новейшую версию Xcode)?

ответ

1

В GameScene.m, вы должны

#import "Hero.h" 

Это объясняет, почему вы получаете «вперед класса» предупреждение: так как вы не импортировали заголовок, единственное, что известно компилятором в модуле компиляции GameScene является форвардная декларация.

Как только вы это сделаете, если вы также объявите initWithGame в Hero.h, то вы не получите предупреждения.

+1

У вас есть дополнительная полутолица, висящая в воздухе: P – 2013-02-13 17:47:00

+0

Спасибо, @ H2CO3. – sergio

+0

Добро пожаловать, сказал компилятор ;-) – 2013-02-13 17:49:12

Смежные вопросы