2010-10-14 4 views
0

J'essaie d'ajouter des animations à mon jeu (application iPhone, en utilisant cocos2d).iPhone - cocos2d - Animations et classe C++

Le jeu a été écrit en C++, et maintenant je veux l'exécuter sur iPhone, donc la plupart des classes sont en C++.

La chose ressemble à ça. Je crée CCSprite, CCAction dans la classe obj-c dans la fonction init, puis exécute CCAction sur l'image-objet. Et l'animation fonctionne.

Mais je veux mettre ces variables CCSprite et CCAction dans ma classe C++. Je crée * CCSprite dans la classe init et envoie ce pointeur à la classe C++. Ensuite, je crée CCAction et l'exécute sur l'image-objet.

Et après cela, quand dans ma fonction init (classe obj-c) faire:

return self; 

alors l'application est en cours d'exécution, en cours d'exécution et en cours d'exécution et rien ne se passe. Je ne reçois ce message dans la console:

* échec Assertion en - [CCSprite SetTexture:], /Users/Michal/..../libs/cocos2d/CCSprite.m:898 en réponse Terminating à la résiliation de SpringBoard.

Je ne sais pas ce que dois-je faire ... Est-il possible de garder CCSprite/action, etc. dans la classe C++ avec succès?

+0

Examinez la méthode setTexture et recherchez NSAssert(). Il vous donnera quelques indices pour trouver quel est le problème. – Francescu

Répondre

3

Assurez-vous que vous avez correctement initialisé la texture avant d'essayer de l'utiliser comme ceci:

CCTexture2D *redButtonNormal = [[CCTextureCache sharedTextureCache] addImage:@"RedButtonNormal.png"]; 

initialiser alors l'image-objet (ou sous-classe de sprite - dans cet exemple spuButton est une sous-classe de CCSprite):

spuButton *redButton = [spuButton spuButtonWithTexture:redButtonNormal]; 

note: il est une sous-classe je devais configurer les méthodes d'initialisation pour elle comme ceci (vous devez le faire si vous sous-classe CCSprite):

+ (id)spuButtonWithTexture:(CCTexture2D *)normalTexture 
{ 
    return [[[self alloc] initWithTexture:normalTexture] autorelease]; 
} 

- (id)initWithTexture:(CCTexture2D *)aTexture 
{ 
    if ((self = [super initWithTexture:aTexture])) { 

     state = kButtonStateNotPressed; 
    } 

    return self; 
}