2013-02-13 55 views
0

我GameScene.m文件:未找到Cocos2d 2.0实例方法; reciever是一个正向类

#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 

而且我心目中的英雄。 m文件:

#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.“实例方法-initWithGame找不到(返回类型默认为'id')”和2.“Receiver'Hero'是一个前向类,相应的@interface可能不存在“

我试着向Hero.h接口添加” - (id)initWithGame:(GameLayer *)游戏“这一行,但它不起作用。我尝试添加该行,但使用+而不是 - ,但没有任何内容。

我最终没有在显示屏上显示我的英雄。有谁知道如何解决这个问题(我使用最新版本的Xcode)?

回答

1

GameScene.m,你应该

#import "Hero.h" 

这就解释了为什么你的“正向类”警告:因为你没有导入头,已知在GameScene编译单元的编译器的唯一的事情就是前向声明。

一旦你这样做,如果你还在Hero.h中声明initWithGame,那么你将不会得到任何警告。

+1

你有一个额外的分号挂在空中:P – 2013-02-13 17:47:00

+0

谢谢,@ H2CO3。 – sergio 2013-02-13 17:48:45

+0

不客气,说编译器;-) – 2013-02-13 17:49:12

相关问题