2011-03-20 2 views
2

Une suite à ma question previous.Constructeur classe/base AS3

J'ai un bouton sur ma scène, qui a une classe appelée Game1 (je n'ai pas défini cette classe, je l'ai simplement liée comme Juan a répondu à mon autre question). Le bouton a 'GameButton' comme classe de base, qui contient pour le moment des instructions x, y simples.

Tous mes boutons auront une classe factice 'GameX' et une classe de base de GameButton; De cette façon, ils héritent de la classe de base, mais ils peuvent toujours avoir un graphique différent.

J'ai une classe principale qui contient le code pour ajouter ce bouton:

public class MainAteam extends MovieClip 
{ 
    public var btn1:Game1; 

    public function MainAteam() 
    { 
     btn1 = new Game1(); 
     addChild(btn1); 
     btn1.addEventListener(MouseEvent.CLICK, startGame1); 
    } 
    // startGame 1 function here 
} 

Maintenant, je voudrais être en mesure de donner des valeurs x, y par des paramètres afin que je puisse placer chaque bouton sur un endroit différent . Cependant, quand j'essaie nouveau jeu (5,5) et je mets ce qui suit dans le constructeur gameobject:

package 
{ 
import flash.display.SimpleButton; 

public class GameButton extends SimpleButton 
{ 
    public function GameButton(startX:Number, startY:Number) 
    { 
     x = startX; 
     y = startY; 
    } 
    } 
} 

Je reçois l'erreur suivante:

1203: No default constructor found in base class GameButton

Je ne sais pas vraiment comment résoudre ce problème, puisque je laisse Flash définir les classes GameX pour moi (je suppose qu'elles sont juste vides) et utiliser la classe de base pour définir certaines propriétés. Si je mets juste x=5; y=5, ça marche bien. Merci beaucoup.

Répondre

3

Ceci est l'une des deux choses, soit vous devez appeler super(); depuis votre constructeur, ou vous n'avez pas implémenté les propriétés/méthodes de classe requises à l'initialisation. Essayez d'étendre Button, pas SimpleButton voir si cela fonctionne mieux pour vous.

EDIT Ma première réponse était sur la bonne voie, mais encore mal. Le problème est que vous créez vos classes Game1, Game2 etc et n'appelez pas le constructeur de la classe GameButton. Lorsque vous étendez une classe avec des arguments constructeurs REQUIS, vous devez les fournir en utilisant super(); Donc dans ce cas, à l'intérieur de votre constructeur de classe Game1 vous devez appeler:

super(positionX, positionY); 

OU

Vous pouvez modifier votre constructeur de GameButton avoir des valeurs par défaut, comme ceci:

public function GameButton(var x:int = 0, var y:int = 0) 

En cas vous ne savez pas, super() est juste un moyen d'accéder au constructeur de la classe de base, qui peut aussi être appelée la super classe, ce qui explique pourquoi la méthode est appelée super :). J'espère que cela t'aides.

AUSSI également

s'il vous plaît noter que si vous créez ces classes Game1, game2 etc au sein de l'IDE Flash (dans la bibliothèque), alors vous allez avoir besoin d'emprunter la voie d'ajouter par défaut valeurs au constructeur GameButton comme Flash génère automatiquement des classes pour les objets de la bibliothèque. Vous pouvez également créer les graphiques dans des clips de bibliothèque précompilés et, au lieu de définir une classe class + base dans les paramètres Export For Actionscript, créez manuellement une classe Game1/Game2 etc, comme vous l'avez fait pour GameButton, puis dans Export For La zone Actionscript place le nom complet de la classe qualifiée.Comme si:

enter image description here

+0

Ce que je n'est maintenant mis btn1.x =, btn1.y = dans ma classe principale (ma classe de jeu) mais je ne suis pas sûr que ce soit une bonne pratique. Je préfère l'envoyer au constructeur avec des paramètres. Le problème que je vois avec ceci est que je laisse Flash générer ces classes Game1, Game2, que je n'utilise pas réellement. Je ne peux pas mettre super(); là (je suppose que ça irait là-bas). Encore confus :( – cabaret

+1

Je viens de mettre à jour ma réponse quelques fois lol pour expliquer tout cela.Animore questions n'hésitez pas à demander –

+1

Ouais j'ai posté plus nfo sur ce qu'il faut faire dans cette situation, expliquant aussi comment tout cela fonctionne/ce que cela signifie Vous avez 2 options (il y en a plus, mais pour simplifier), vous créez et utilisez vous-même ces classes (codées à la main) ou vous ajoutez des valeurs par défaut au constructeur de super classe –