Un objet peut-il se retirer? Comment?
Je suis en train d'écrire un simple jeu de balle, et il y a plusieurs tours (ie., balle de vie). La balle "meurt" lorsqu'il passe à la bordure inférieure de l'écran. Ce que j'ai pour l'instant fonctionne, mais ne semble pas être la bonne façon de faire les choses:
if (ball.getY() > bottomOfScreen) {
ball.die();
remove(ball);
}
Le die() la méthode fondamentalement, les fondus de la balle de couleur lentement (dark_gray -> pause(50) -> light_gray -> pause(50)), mais n'est pas réellement faire quelque chose d'utile.
Le supprimer(), évidemment, de se débarrasser de la balle de l'écran, qui est ce que je veux. Il fait sens pour moi pour cela supprimer() pour faire une partie de Ballon die() la méthode, contrairement à ce qu'elle soit séparée de l'appel de méthode dans le programme principal, mais je ne suis pas sûr de savoir comment aller à ce sujet?
Un objet peut-il supprimer lui-même? Et, s'il le peut, est l'objet de suicide de mieux que de l'objet de meurtre, à partir d'une philosophie/point de vue méthodologique?
Merci!
OriginalL'auteur Alicja Z | 2011-09-01
Vous devez vous connecter pour publier un commentaire.
L'objet peut supprimer lui-même étant donné qu'il a une sorte de référence pour le rendu de l'affichage mécanisme. Votre exemple ne donnent pas assez d'informations donc je vais illustrer une façon de le faire:
Ni suicide ni meurtre est meilleur ou pour le pire. Cela dépend de votre conception et les exigences.
Dans cet échantillon, bien que, meurtre pourrait être préférable puisque de cette façon, le
Ball
objet n'est pas besoin de connaître le contexte dans lequel il est utilisé.Merci pour expliquer votre raisonnement. Vous avez raison, bien que dans un scénario plus complexe (c'est à dire, en utilisant MVC/modèle Observateur), l'objet pourrait demander la suppression par exemple, dans le cadre du changement de gestionnaire.
OriginalL'auteur Johan Sjöberg
Il est possible de créer une méthode dans laquelle la boule supprime lui-même, mais c'est une mauvaise chose à faire. Afin de supprimer de l'écran, la Balle doit avoir une référence à l'écran. Cela crée une chaîne circulaire de références (la Balle a une référence à l'écran, de l'écran a une référence à la Balle) qui va faire une conception plus complexe et de vos tests beaucoup plus compliqué.
Le Suicide est fine, l'écran indique le ballon à mourir, et le ballon meurt. Mais c'est à propos de la suppression d'une relation, de ne pas mourir. La chose du maintien de la relation est à l'écran, et il devrait donc être la chose à faire l'enlèvement.
Rappelez-vous aussi que les deux n'ont pas forcément à se produire ensemble. L'écran voudrez peut-être garder une balle morte autour de, pour quelque raison, et qu'il pourrait vouloir supprimer une boule qui n'est pas morte. Même si cela n'arrive pas dans votre application dès maintenant, laissons la possibilité.
OriginalL'auteur DJClayworth
Dans le sens de la suppression de l'objet à partir de la mémoire: aucun, en Java, qui est géré par le garbage collector exclusivement.
Ce que vous pourriez faire est de supprimer l'objet de collections contenant, mais cela nécessiterait l'objet pour avoir accès à ces collections (qui dans la plupart des cas ne serait pas possible, car il pourrait y avoir beaucoup de collections).
Je vous suggère de l'objet contenant (l'écran dans votre cas) pour vérifier le contenu de l'objet (de la balle) l'état et les supprimer après il est réellement mort.
OriginalL'auteur Thomas
Il y a probablement un objet (par exemple, l'Écran, ou le ViewRenderer dans Johan exemple) qui contient une référence à la Balle, et la suppression de cette référence doit être fait par l'Écran ("objet de meurtre"). "L'objet de suicide" d'un montant de Boule en passant un message à l'Écran vous demandant d'être "assassiné".
Puisque c'est le Ballon qui sait quand il a passé la frontière, il fait sens pour moi (sans connaître les détails de votre conception) pour le retrait d'être lancé par le Ballon. Ensuite, l'Écran peut savoir au sujet de ce changement par un ou plusieurs moyens:
BallObserver
interface. Ceci est une application de la modèle observateur.La première est la plus simple, et cela en fait un bon choix si elle s'intègre naturellement dans votre mécanisme pour la peinture de l'écran. La troisième est plus souple dans son principe, mais vous ne pourriez pas besoin de cette souplesse dans la pratique. Le milieu de l'option peut être OK, dans un programme simple, mais vous devriez probablement envisager comme une étape sur le chemin de la troisième.
Et si vous ne pas d'Écran (ou ViewRenderer, ou quoi que ce soit) de l'objet et signifie vraiment "un autre appel de la méthode dans le programme principal" vous devriez revoir votre conception.
OriginalL'auteur Ben
Non, les objets ne peuvent pas le suicide. Toute mention de lui-même est seulement une référence.
Pour "effacer" l'objet à l'intérieur d'elle-même seulement effacer toutes les variables d'instance.
Pour "effacer" l'objet en dehors de lui-même un aurait la valeur de la variable est égale à null.
OriginalL'auteur Joseph Hansen