2013-06-13 1 views
1

Je suis nouveau sur Cocos2dx et j'essaye de créer une animation de planète en se déplaçant en utilisant une texture rectangle 3: 1, qui contient 3 carrés sont deux faces (carte) de la sphère (le troisième carré est un clone du premier). Je crée un tableau d'images en recadrant la texture et je les ajoute à CCAnimation. Ensuite, je teste cette animation avec deux effets pour faire du cadre carré un cercle 3D: CCLens et CCTurnOffTiles (je le modifierai dans le futur pour désactiver uniquement les grilles en dehors du cercle).Exécuter de nombreuses actions d'effets simultanément dans Cocos2dx

Mais il y a un problème: deux effets ne s'empilent pas. Si CCTurnOffTiles est ajouté après CCLens, CCLens ne fonctionnera pas; Si CCLens est ajouté après CCTurnOffTiles, CCDirector lancera une exception de violation de lecture lors de l'exécution.

Existe-t-il une solution pour exécuter de nombreux effets simultanément ou implémenter l'animation de la planète d'une autre manière? Merci.

+0

Lors de la création de deux animations différentes, assurez-vous d'utiliser des tableaux différents et CCAnimation. Je suis assez sûr que vous pouvez utiliser deux animations différentes sur le même sprite simultanément en utilisant séparément runAction –

+0

@GaneshSomani Normalement, cela devrait fonctionner. Mais dans ce cas, il semble que CCLens et CCTurnOffTiles ne fonctionneront pas ensemble. – eee

Répondre

1

CCTurnOffTiles et CCLens3D héritent de CCGridAction.

Mais l'un annule l'autre: CCTurnOffTiles va désactiver les tuiles de grille, et CCLens3d a besoin de ces tuiles de grille.

Je vous recommande de dessiner tous les sprites de la planète, déjà encerclés et en utilisant une SpriteSheet, et de les animer ensuite avec CCAnimation, sans utiliser CCTurnOffTiles ou CCLens3D. C'est le plus facile et consommera moins de cpu.

+0

Dans mon projet, il y a beaucoup d'objets de la planète qui utilisent différentes textures. Dessiner tous les sprites de la planète signifie que beaucoup d'œuvres d'art doivent être faites. Par conséquent, je cherche une autre solution à la place de celle-ci. Est-il possible de modifier directement le CCFrame au moment du chargement ou de créer un masque pour que seuls les points à l'intérieur du cercle deviennent visibles pendant l'action animée? – eee

+0

Vous pouvez masquer les sprites en utilisant des shaders, GlScissor ou CCClippingNode. Jetez un oeil à ces liens: http://www.raywenderlich.com/4428/how-to-mask-a-sprite-with-cocos2d-2-0, http://www.cocos2d-iphone.org/forums/topic/comment-définir-un-masque-sur-un-spriteatlassprite-objet /, http://stackoverflow.com/questions/3177751/cocos2d-iphone-sprite-cliping-mask-frame – Bivis

3

Essayez d'utiliser CCSpawn.

// Create the effects 
CCLens3D * lensEffect; // Your CCLens3D create() 
CCTurnOffTiles * turnOff; // Your CCTurnOfftiles create() 

// Create a spawn to run them simultaneously 
CCSpawn * sphereEffect = CCSpawn::createWithTwoActions(lensEffect, turnOff); 

// Run the spawn 
myObject -> runAction(sphereEffect); 
+0

J'ai essayé d'utiliser CCSpawn mais j'ai eu la même erreur en utilisant runAction séparément. – eee

Questions connexes