2009-07-10 8 views
3

J'ai défini un sprite en utilisant la méthode spriteWithFile, fournissant un 120px par 30px .pngCocos2d Sprite contentSize Problème

Sprite *trampoline = [Sprite spriteWithFile:@"trampoline.png"];  
[self addChild:trampoline]; 

Quand j'ajoute à mon couche et la position, il est là où je pense à être sur l'écran.

trampoline = [Trampoline node]; 
trampoline.position = ccp(160,15); 
[self addChild:trampoline z:0 tag:1]; 

Cependant, il semble ne pas avoir de taille de contenu. La déclaration NSLog suivante:

NSLog(@"Content Size x:%f, y:%f", trampoline.contentSize.width,trampoline.contentSize.height); 

donne ce qui suit lire:

2009-07-10 18:24:06.385 TouchSprite[3251:20b] Content Size x:0.000000, y:0.000000 

Est-ce que je manque quelque chose? Cela ne devrait pas être 120.000000 par 30,000000

Toute aide serait grandement appréciée.

Cordialement,

Rich

Répondre

3

sont-elles une partie des lignes de la classe trampoline?

Sprite *trampoline = [Sprite spriteWithFile:@"trampoline.png"]; 
[self addChild:trampoline]; 

De mon expérience limitée avec cocos2d, contentSize d'un Sprite semble appliquer seulement le contenu qui appartient en fait à la Sprite, et tous les enfants de cette Sprite. Par conséquent, dans votre exemple ci-dessus, demander le paramètre contentSize dans votre instruction de journal ne fonctionnera pas, car aucun contenu n'a été ajouté au noeud Trampoline. Toutefois, si vous deviez remplacer la méthode contentSize dans votre classe Trampoline pour renvoyer la propriété contentSize du sprite qui a réellement chargé le graphique, cela devrait fonctionner.

Voici un extrait d'un Sprite J'utilise dans un jeu, je travaille actuellement sur qui illustre ce dont je parle:

- (id) init 
{ 
self = [super init]; 

if (self != nil) 
{  
    self.textLabel = [Label labelWithString:@"*TEXT*" 
            fontName:@"Helvetica" 
            fontSize:18]; 

    [textLabel setRGB:0 :0 :0]; 

    textLabel.transformAnchor = CGPointZero; 
    textLabel.position = CGPointZero; 
    self.transformAnchor = CGPointZero; 

    [self addChild:textLabel]; 
} 

return self; 
} 
// 

- (CGSize) contentSize 
{ 
return textLabel.contentSize; 
} 

Cela vient d'une classe qui étend Sprite. Jusqu'à ce que j'ajoute le remplacement pour contentSize, le demander à une autre classe me donnerait les mêmes résultats que vous voyez. Maintenant que je lui dis de retourner la taille du contenu de textLabel, ça fonctionne comme je l'attendais.

0

Je suppose Trampoline hérite de Sprite, qui hérite alors du noeud. Vous êtes en train d'écraser le trampoline avec [Trampoline node] qui crée un nœud ... mais l'implémentation de Trampoline remplace-t-elle la méthode node pour initialiser votre fichier sprite dans le nœud Trampoline?

Je pense que vous êtes juste une classe vide de nœud arrière de la ligne:

trampoline = [Trampoline node]; 
+0

La trampoline est une sous-classe de Sprite. La ligne trampoline = [Trampoline node] initialise mon objet. Le trampoline n'est pas vide car il possède sa position et affiche l'image sur mon écran. – Rich