2010-01-11 3 views
0

J'essaie d'implémenter mon propre parallaxe de défilement dans Cocos2d car la fonctionnalité de parallaxe intégrée n'est pas exactement ce que je cherche (elle met à l'échelle les calques, ce qui n'est pas le cas Je veux)Problème d'animation d'un calque Parallax dans Cocos2d-iPhone

Alors, mes propres couches Parallax écrasent les couches méthode comme celle

- (void) setPosition:(CGPoint)point 
{ 
    [super setPosition:CGPointMake(point.x/pRatio, point.y/pRatio)]; 
} 

pRatio est un int qui réduit la quantité de la couche se déplace en, créant ainsi le genre d'effet parallaxe je suis à la recherche de. Et ça fonctionne parfaitement comme ça.

Cependant, à l'occasion, je dois animer un calque à une position spécifique en utilisant MoveTo, donc j'ai créé cette méthode qui répond à un NSNotiification

- (void) gotoStartPosition:(NSNotification *)notification 
{ 
    CGPoint startPos = CGPointFromString([notification object]); 
    id moveToStart = [MoveTo actionWithDuration:1 position:startPos]; 
    [self runAction:moveToStart]; 

} 

Ce qui fonctionne jusqu'à ce que je mets le pRatio à quoi que ce soit au-dessus de 1. Si le pRatio est supérieur à 1, alors gotoStartPosition fait passer la couche à CGPoint(0,0) et s'anime en position à partir de là.

Je ne peux pas comprendre à quel point la position des couches est réglée sur 0,0, et je ne comprends pas pourquoi il fait seulement quand pRatio est supérieur à 1.

Je soupçonne que c'est ça va être quelque chose de douloureusement simple, mais je pense que mon cerveau est frit. Toute aide, grandement appréciée.

Répondre

0

MISE À JOUR: Je suis un doofus. Ce qui se passe est évident. L'animation définit d'abord la position des calques à sa position actuelle. Mais j'ai dit à la couche de diviser toutes les coordonnées setPosition par pRatio. Donc ça ne va pas à CGPoint (0,0) mais quelque chose comme CGPoint (0,032, 0). Je l'ai réparé comme ceci:

- (void) setPosition:(CGPoint)point 
{ 
    if(!animating){ 
     [super setPosition:CGPointMake(round(point.x/pRatio), round(point.y/pRatio))]; 
    }else{ 
     [super setPosition:point]; 
    } 

} 


- (void) gotoStartPosition:(NSNotification *)notification 
{ 
    animating = YES; 
    CGPoint startPos = CGPointFromString([notification object]); 
    CGPoint pStart = CGPointMake(startPos.x/pRatio, startPos.y/pRatio); 
    id moveToStart = [MoveTo actionWithDuration:1 position:pStart]; 
    id endAnim = [CallFunc actionWithTarget:self selector:@selector(endAnimation)]; 
    [self runAction:[Sequence actions: moveToStart, endAnim, nil]]; 
} 

- (void) endAnimation 
{ 
    animating = NO; 
} 

Ce qui n'est pas élégant, mais cela fonctionne. Je ferme cette question.

Questions connexes