2012-07-01 4 views
1

Dans un jeu sur lequel je travaille, une classe a le travail de dessiner un sprite alors qu'une autre classe a le travail de manipuler les coordonnées (ie si le sprite est sur le point de partir l'écran, arrêtez-le là Oui, je sais que c'est des graphiques vectoriels). Quoi qu'il en soit, j'ai besoin que les coordonnées soient partagées entre les deux classes. J'ai essayé de le faire avec une extension de classe, mais cela a généré un débordement de pile car la superclasse (la classe qui dessine l'image-objet) doit créer une instance de la sous-classe (la classe qui va manipuler les variables).Comment partager une variable entre les classes sans extension

// In the superclass Render 
public AnimateMC mc = new AnimateMC(2); // AnimateMC is the subclass of the 
              superclass, Render 
//later in the program 
//code for drawing all of the shapes in the sprite 
mc.gravitizeY(); // this is why I need to make an instance of AnimateMC 

// In the subclass AnimateMC 
// animates sprite by changing the coordinates 

Comment pourrais-je partager les coordonnées à variable entière entre les deux classes sans étendre une classe.

+0

Quel est le problème avec les getters et les setters? Ce n'est pas tout à fait clair à partir de votre exemple, mais vous êtes presque certainement en train de penser à ce problème - c'est très commun. Pourriez-vous poster un exemple plus détaillé? – dimo414

+0

Je n'ai pas couvert les getters et les setters. Je suis toujours un lycéen. Quels sont ces? – kullalok

+0

Idée assez simple, un objet (pas classe, attention, le terme que vous utilisez est important) contient les coordonnées, et possède une méthode 'getCoordinates()' qui peut être appelée et transmise au second objet. – dimo414

Répondre

4

Vous avez appris qu'une mauvaise utilisation de l'héritage ne résoudra pas ce problème. Au lieu de se prolonger à travers la composition: Passer une référence à l'image-objet d'un objet à l'autre et de travailler avec la référence.

donc donner à la classe qui a besoin d'avoir accès à l'image-objet une variable Sprite, Sprite, et passer ensuite dans la référence Sprite par une méthode setter, c.-à-

public void setSprite(Sprite sprite) { 
    this.sprite = sprite; 
} 

ou le mettre dans le constructeur de la classe .

3

Ceci est une question fondamentale Model View Controller, et je suppose que vous manquez la partie "Contrôleur". Vous avez besoin d'une classe centrale dont le travail consiste à gérer à la fois la logique du jeu (modèle) et la logique d'affichage (vue) et à partager les données entre eux. Il y a beaucoup de ressources là-bas, l'article de Wikipedia auquel je suis lié est un bon début. De la façon dont vous avez formulé votre question, je suppose que vous n'avez pas encore une bonne compréhension de l'héritage des objets - ce n'est pas compliqué, mais vous ne voulez presque jamais étendre un objet pour partager des données entre deux classes différentes, ce qui ressemble à ce que vous essayez de faire ici.

La règle générale pour "Dois-je étendre cet objet?" est la relation Has-A vs. Is-A. Fondamentalement, si un objet Is-A est un autre objet, l'un devrait probablement étendre l'autre. Sinon, ils ne devraient pas. Pensez Car Is-A Vehicle donc Car extends Vehicle mais Car Has-A Sunroof alors Sunroof ne doit pas étendre Car. Encore une fois, lisez le lien pour plus.

+0

excellent conseil. 1+ –

Questions connexes