2009-12-18 6 views
0

J'ai un problème. Lorsque l'action smokeMoveBy commence une petite bulle de fumée est repérée sur l'écran à l'autre endroit, puis le chemin de la fumée. Cela ne se produit que lorsque j'utilise scaleX et scaleY. La méthode smokeLoop est appelée toutes les 1 secondes dans le planificateur. Voici moi-même une couche.Problème avec bulle de fumée dans cocos2d

Des solutions?

Mon code suit,

CGPoint dummyPosition=ccp(600, 600); 
ParticleSystem *smoke = [ParticleSmoke node]; 
ccColor4F startColor; 
startColor.r = 1.f; 
startColor.g = 1.f; 
startColor.b = 1.f; 
startColor.a = 1.f; 
[smoke setStartColor:startColor]; 
ccColor4F endColor; 
endColor.r = 0.8f; 
endColor.g = 0.8f; 
endColor.b = 0.8f; 
endColor.a = 1.0f; 
[smoke setEndColor:endColor]; 
[smoke setLife:0.1f]; 
[smoke setScaleX:0.1f]; 
[smoke setScaleY:0.2f]; 
[smoke setStartSize:30.f]; 
[self addChild:smoke z:2]; 
[smoke setPosition:dummyPosition]; 

-(void)smokeLoop{ 
id smokeMoveBy = [MoveBy actionWithDuration:durTime position:ccp(0.f, (-1.f*480))]]; 
id smokeSeq=[Sequence actions:[Place actionWithPosition:smokeInitPosition], smokeMoveBy, nil]; 
[smoke runAction:smokeSeq]; 
} 

Répondre

0

Je ne sais pas si cela est votre problème, mais j'eu un problème avec Cocos2D, mise à l'échelle et le déplacement, que je résolus avec le déplacement du Anchorpoint.

Ce que je voulais faire est zoom (échelle) et déplacer un calque. Le zoom se déplacerait correctement si la position était {0,0} et le point de transformation était {0,5,0,5}. Mais si je le bougeais, il se transformerait encore autour de {0.5, 0.5}, ce qui pourrait alors être hors de l'écran, donc cela serait vraiment bizarre.

La solution consistait à déplacer le point de transformation au milieu de l'écran, chaque fois que je déplaçais la position du calque. Ce n'était pas une formule facile à corriger, car lorsque je déplaçais le point de transformation, l'opération d'échelle avait un nouveau point central.

La formule I fini par utiliser est la suivante:

layer = self.foreground; 
ccpAdd(
    ccpDivide(
     ccpNeg(layer.position), 
     (CGPoint){layer.contentSize.width, layer.contentSize.height}), 
    (CGPoint){0.5f,0.5f} 
); 

En gros: Diviser l'inverse de la position des couches (sens, {} 300200 deviendrait {-300, -200}) par la taille la couche {480,320}, puis ajoutez {0,5,0.5} (comme je veux que mon ancre soit toujours centre + offset)

De toute façon, vous devrez peut-être élaborer une formule complètement différente, mais cela a fonctionné pour moi. Je devais l'appliquer à mon point d'ancrage chaque fois que je déplaçais le calque.

Bonne chance, j'espère que ça aide!