2012-12-28 27 views
0

我对Objective-C并不陌生,但我无法弄清楚这个问题。我试图创建一个我创建的CCSprite的子类的实例,但它总是在(0,0)创建实例,我无法移动它。我已经设置了我的代码,以便它解析我在其中放置关卡信息的.txt文件,然后基于该信息创建精灵。无法定位CCSprite子类的实例

下面是初始化精灵代码:

-(void)initLevel{ 

NSLog(@"Level %i is of length %i", lvlNum, [FileReader getLengthOfLevel:[FileReader getStartOfLevel:lvlNum atPath:lvlPack] atPath:lvlPack]); 
CCSprite *spriteToMake; 
int start = [FileReader getStartOfLevel:lvlNum atPath:lvlPack]; 
int length = [FileReader getLengthOfLevel:start atPath:lvlPack]; 

NSString *tmp = [FileReader getLineFromFile:lvlPack byIndex:start]; 
NSArray *tmpArray = [tmp componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
NSMutableArray *tmpArray2 = [tmpArray mutableCopy]; 
[tmpArray2 removeObject:@""]; 

requiredLinks = [(NSString*)[tmpArray2 objectAtIndex:2] intValue]; 

[tmpArray2 release]; 

for(int i = start + 1; i <= start + length; i++){ 
    NSString *line = [FileReader getLineFromFile:lvlPack byIndex:i]; 
    int x = 0; 
    int y = 0; 

    NSArray *temp = [line componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
    NSMutableArray *temp2 = [temp mutableCopy]; 
    [temp2 removeObject:@""]; 

    //Determine the type of sprite 
    if([(NSString*)[temp2 objectAtIndex:0] isEqualToString:@"Basic_Sprite"]){ 
     spriteToMake = [BasicLink sprite]; 
    }else if([(NSString*)[temp2 objectAtIndex:0] isEqualToString:@"Big_Sprite"]){ 
     spriteToMake = [BasicLink spriteWithFile:@"Big_Link.png"]; 
    }else{ 
     spriteToMake = nil; 
    } 

    //Create the sprite 
    if(spriteToMake != nil){ 
     x = [(NSString*)[temp2 objectAtIndex:1] intValue]; 
     y = [(NSString*)[temp2 objectAtIndex:2] intValue]; 
     spriteToMake.position = ccp(x, y); 
     NSLog(@"%@", spriteToMake); 

     [self addChild:spriteToMake]; 
     [spriteToMake setUpdate]; 
    }else{ 
     NSLog(@"Sprite set to NULL"); 
    } 

    NSLog(@"%i, %i, %i", x, y, [temp2 count]); 

    [temp2 release]; 
    } 
} 

而这里的子类头:

@interface BasicLink : CCSprite{ 
CGPoint position; 
CGPoint movement; 
int explosionRadius, width, height; 
CCScene *sceneIn; 
} 

@property (assign)CGPoint pos, movement; 
@property (assign)int explosionRadius, width, height; 
@property (assign)CCScene* sceneIn; 

+(CCSprite*)sprite; 
+(CCSprite*)spriteAtX:(int)x atY: (int)y; 

-(void)die; 
-(void)explode; 
-(void)updateSprite; 
-(CGRect)getBounds; 
-(void)setUpdate; 
-(void)move:(int)x, int(y); 

@end 

而这里的初始化精灵子类的部分:

@implementation BasicLink 

@synthesize position, movement, explosionRadius, sceneIn, width, height; 

+(CCSprite*)sprite{ 
    return [BasicLink spriteWithFile:@"Basic_Link.png"]; 
} 

任何帮助表示赞赏。

回答

0

这里有一个明显的问题:

-(void)move:(int)x, int(y); 

在C中,comma is an operator。编译器将此语句解释为此方法声明:

- (void)move:(int)x 

我不完全确定它在做什么int(y);它可能将其视为C函数声明。无论如何,它不是方法声明的一部分。

你我的行动的声明应该是这样的:

- (void)moveToX:(int)x andY:(int)y; 

另一个小错误是你的类方法的返回类型:

+(CCSprite*)sprite{ 
    return [BasicLink spriteWithFile:@"Basic_Link.png"]; 
} 

这应该是:

+ (BasicLink *)sprite{ 
    return [BasicLink spriteWithFile:@"Basic_Link.png"]; 
} 

这可能不是你的问题在这里,虽然。

+0

“int(y)”是一个错字。 – sciguy1121