Des sprites destructeurs dans Phaser
Je vais avoir de la difficulté à détruire les Sprites dans Phaser.
J'ai un objet JavaScript, nous allons l'appeler le Bloc. Le bloc a un sprite de la propriété, qui est défini comme suit:
this.sprite = this.game.add.sprite(this.x, this.y, 'blocks', this.color);
À un certain point dans mon code, le Bloc est référencé par deux tableaux:
square[0] = Block;
destroy[0] = Block;
Sur une certaine mise à Jour() cycle, j'ai besoin de détruire le sprite, donc je suis en utilisant le code suivant:
square[0].sprite.destroy(true); //Destroy the sprite.
square[0] = null; //Remove the reference.
Sur la prochaine mise à Jour() du cycle, quand je regarde les détruire[0], je m'attends à voir:
destroy[0].sprite: null
Cependant, ce que je vois est:
destroy[0].sprite: b.Sprite
Avec les propriétés par défaut et la valeur false. Mon souci est, si je devais maintenant ensemble de détruire[0] à null, ce qui va arriver à cet objet sprite?
Est-ce juste flotter autour ou s'il est nettoyé automatiquement?
Dois-je détruire le Bloc de l'objet premier d'une certaine façon?
Aussi, si destroy() n'est pas invalide la référence, comment est-il différent de kill()?
Toute réflexion sur le sujet sera grandement apprécié.
source d'informationauteur alexania
Vous devez vous connecter pour publier un commentaire.
Différence entre Tuer et Détruire
Kill
est censé arrêter le rendu, mais l'objet existe toujours. Il est bon si vous voulez faire un objet réutilisable.Vous pouvez créer de nouveau l'objet sans le coût de la création de l'objet.
Destroy
devrait supprimer l'objet et tout ce qui l'entoure. Vous utilisez cette fonction lorsque vous souhaitez envoyer l'objet vers le garbage collector.Veuillez noter que pour certains objets, tels que du texte, vous ne pouvez pas utiliser
kill
vous ne pouvez utiliserdestroy
De référence:
http://www.html5gamedevs.com/topic/1721-how-to-remove-text/#entry12347
@ibnu est correct.
Détruire
nukes l'objet, tandis quekill
arrête de rendu. Cependant, votre question est relative à des fuites de mémoire et GC. Je suis pas de GC pro, mais voici ce que je pense qui se passe.Mais
destroy[0].sprite
détient toujours une référence à votre "détruit" sprite.this.sprite
n'est probablement trop. C'est parce que le Phaser détruire méthode ne supprime Phaser propriétés spécifiques de l'objet. JS est en charge de l'objet générique de Collecte des Ordures. L'objet s'échappe que parce que vous avez toujours valide références dans le champ d'application.Résoudre ce problème en supprimant la référence à partir de portée
destroy[0].sprite = null
ou en attendant le prochain état à modifier la portée (en supposant que détruire n'est pas statique var). Vous n'avez pas à gérer les ressources de la mémoire, toi, JS != C. assurez-vous de ne pas fuite variables à travers différence étendues.Qu'est-ce que JavaScript collecte des ordures? (même si je ne pense pas que le
delete
commande est recommandée pour les GC plus, ce n'est certainement pas nécessaire dans Phaser)