2012-12-28 38 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