Не удается разместить экземпляр подкласса CCSprite

Я не очень новичок в Objective-C, но я не могу понять эту проблему. Я пытаюсь создать экземпляр подкласса CCSprite, который я сделал, но он всегда создает экземпляр в (0,0), и я не могу его переместить. Я настроил свой код так, чтобы он анализировал файл .txt, в который я помещал информацию об уровне, а затем создавал спрайты на основе этой информации.

Вот код, который инициализирует спрайт:

-(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"];
}

Любая помощь приветствуется.


person sciguy1121    schedule 28.12.2012    source источник


Ответы (1)


Вот очевидная проблема:

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

В C запятая является оператором. Компилятор интерпретирует этот оператор как объявление этого метода:

- (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"];
}

Хотя, скорее всего, это не ваша проблема.

person Ant    schedule 28.12.2012