2012-12-28 3 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"]; 
} 

도움을 주시면 감사하겠습니다. C에서

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

comma is an operator :

답변

0

여기에 명백한 문제입니다. 컴파일러는이 메소드 선언과 같은이 문장 해석 : 나는 int(y)와 함께 무엇을하고 있는지 전혀 확실하지 않다

- (void)move:(int)x 

을; C 함수 선언으로 취급 할 가능성이 있습니다. 어떤 경우이든 메서드 선언의 일부가 아닙니다.

이사 선언은 다음과 같아야합니다

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

가 있어야한다 :

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

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

또 다른 사소한 실수는 당신의 클래스 메소드의 리턴 타입입니다

아마도 그렇지 않습니다. 그래도 문제는.

+0

"int (y)"는 오타였습니다. – sciguy1121