Essayer de SubcLass Skspritenode alors faites de mon nettoyeur de code de jeu, et je ne comprends évidemment pas quelque chose. Voici un exemple très simple: je crée un nouveau fichier Swift appelé dans mon jeu, je fais: p> et je reçois: p> C'est un nom (sksprittenode): '(NULL) ...' P>
BlockQuote> Même Xcode dit qu'il s'agit d'une "prite Alienss": p> Pourquoi, au moment de l'exécution, est il n'imprime pas que c'est une «aloisprite»? P> EDIT: Incorporer l'un de mes commentaires ici - Je prends en fait le sprite de mon fichier .sks, où je l'ai placé avec l'éditeur de scène et set sa classe personnalisée. J'essaie de le ramasser avec: p> mais je reçois l'erreur: p> alien.swift code> avec le contenu suivant:
3 Réponses :
Vous n'utilisez pas le nom de la variable forte> lorsque vous déclarez p> Vous créez essentiellement un skprittenode vide. Cela signifie que lorsque vous faites l'interpolation de chaîne, vous imprimez le SKSpritenode actuel et ses propriétés. Em> p> Pour résoudre ce problème, vous avez deux options. P> original fort> p> Imprimer le type d'Alienensprite: P>
Définissez le nom de l'étranger et imprimé que: p>
print("It's an \(type(of: alienSprite)) \(alienSprite)")
alienSprite.name = "Alien"
print("It's an \(alienSprite.name)")
Non, cela crée un «étranger» vide, et je voulais imprimer l'instance et ses propriétés, car je pensais que cela imprimait également le type de l'instance, mais cela ne semble pas. La propriété "nom" est complètement différente et non liée à la classe. Je ne peux pas obtenir votre type () travailler.
Toutes mes excuses, je ne savais pas qu'un backslash est supprimé sur Stackexchange. Essayez-le maintenant
Il dit qu'il s'agit d'impression c'est un nom (sksprittenode): '(null) ...' code> au lieu de
c'est un nom (étranger): '(null) ...' < / code>
Lorsque vous Imprimez em> un objet, comme dans Imprimer ("C'est un \ (Aliensprite)") Code>, vous pouvez demander à voir son
Description code > Propriété. Par défaut pour un
sknode code> Cette propriété imprime simplement la propriété
nom code> de l'objet, car vous n'avez pas redéfini ce comportement, vous obtenez le message
(sksprittenode) Nom: null code>. Si vous voulez redéfinir, changez la description de votre nouvelle classe à quelque chose de plus pratique, ce qui devrait fonctionner:
class Alien : SKSpriteNode {
override var description: String {
return "\(String(describing: type(of:self)))"
}
}
Est ce swift 3 seulement?
Qu'est-ce que SWIFT 3 n'est que type (de:) code>, pour une version plus ancienne que vous pouvez utiliser (peut vous rappeler exactement que c'est facile à trouver) quelque chose comme
self.dynamictype code>.
Description CODE> et
DEBUGDESCRIPTION code> sont des mécanismes standard.
Remarquez à l'état de votre fichier de scène. Si vous le voyez ombragés, cela signifie qu'il n'a pas encore été sauvé. Si vous compilez votre code tout en restant dans l'éditeur de scène, la sauvegarde ne se produira pas, alors assurez-vous de frapper CMD + S pour enregistrer avant la compilation.
p>
Maintenant, dans le cas où les gens essaient de comprendre pourquoi les noms de classe ne sauvegardent pas, assurez-vous de saisir l'entrée ou de quitter le champ de texte et d'aller à un autre champ de texte pour vous assurer que le nom de la classe enregistre, sinon elle reviendra à une personne âgée. état. p>
Cela corrigé - L'éditeur de scène semblait réticent à conserver la valeur que j'avais mise en place pour la classe personnalisée.
C'est tellement basique - je dois faire quelque chose de stupide. J'ai vérifié des tutoriels que j'ai suivis et ça a l'air identique. Je ne pense pas avoir besoin de remplacer les initialiseurs à ce stade, juste pour obtenir une sous-classe de base.
Cela semble juste être la méthode de description standard de SKSprittenode, je ne le laisse pas vous dérouter. Vous pouvez vérifier la classe à l'exécution avec
Imprimer (type (de: Aliensprite)) Code> (Swift 3) ou
Imprimer (Aliensprite.dynamictype) Code> (Swift 2).
@Martinr merci - je vais faire un autre test. Je ramassais à l'origine le sprite à partir d'un fichier .sks (via ChildnodewithName) et il générait une exception que le casting de SkspritTenode à Alien était en panne.
@Martinr. Merci pour la pointe de l'affichage de la classe, bien que la version SWIFT2 ne fonctionnait pas (aucune propriété de ce type dynamictype).
Ok c'est ennuyeux - ça marche maintenant et je ne sais pas ce que j'ai fait. Le champ "Custom Class" de mon noeud dans l'éditeur de scène semblait être vide à chaque fois que je l'ai vérifié (au lieu de "joueurs de jeu", alors c'était peut-être un virus XCode. Je n'ai pas besoin d'initialiseurs non plus.
Il y a une faute de frappe dans mon dernier commentaire, son
impression (aliensprite.dynamictype) code> pour SWIFT 2. - Voter pour fermer en tant que problème qui ne peut plus être reproduit.
Steve, hit cmd + s après votre place dans la classe personnalisée Sprite (assurez-vous de saisir Entrée pour sortir du mode d'édition de texte)
@ Knight0fdragon Merci - je supporterai cela à l'esprit à l'avenir.
@Martinr il est possible d'être reproduit, comme on le voit dans ma réponse
@ Knight0fdragon - Pouvez-vous faire votre commentaire sur la manière dont l'éditeur de scène ne conserve pas toujours votre réglage de classe personnalisée et votre réponse et je vais éteindre / l'accepter. Merci.
@Steveives ok, je vais essayer de fournir des images aussi