Qu'est-ce que je fais mal?
_root
- l'utilisation de la liste d'affichage et comment il fonctionne
- la conception en général
Cette _root
variable est totalement inutile. Vous avez probablement copié cela à partir d'un tutoriel en ligne. C'est une mauvaise pratique qui mène à des pratiques pires. Il recrée la fonctionnalité qui est déjà là. Ne l'utilise pas.
Ensuite, EasyDraw
classe elle-même. Cette classe est essentiellement un conteneur vide avec des méthodes pour y ajouter des formes. Compte tenu de la structure générale de la liste d'affichage de l'ajout DisplayObject
s à DisplayObjectContainer
s, cela semble être couplé inutilement. Pourquoi le conteneur apporterait-il les méthodes pour créer les enfants? Créez plutôt des classes séparées pour les cercles et les rectangles de manière orientée objet. Ensuite, il suffit de les ajouter à un objet Sprite
si vous avez besoin d'un conteneur. Il n'y a pas besoin de EasyDraw
.
Le concept décrit pourrait conduire à deux classes comme celles ci-dessous. Ils sont basés sur votre code. Pensée orientée objet naïf ici: Vous voulez un cercle? Créez un cours pour ça! Tu veux un rectangle? Créez un cours pour ça! Mais ça fait le travail.
package ezd.easydraw
{
import flash.display.Shape;
public class CircleShape extends Shape
{
public function DrawCircle(r:Number=50, color:uint = 0)
{
graphics.beginFill(color, 1);
graphics.drawCircle(0, 0, r);
graphics.endFill();
}
}
}
package ezd.easydraw
{
import flash.display.Shape;
public class RectangleShape extends Shape
{
public function RectangleShape(w:Number = 50, h:Number = 50, color:uint = 0)
{
graphics.beginFill(color, 1);
graphics.drawRect(-w/2, -h/2, w, h);
graphics.endFill();
}
}
}
J'ai fait quelques ajustements qui sont pour la plupart des préférences personnelles, vous pouvez faire votre chemin:
J'ai supprimé les paramètres qui définissent la position du constructeur comme ils juste gonfler le constructeur et chaque DisplayObject
définit des setters pour ceux de toute façon. Si vous insistez pour placer toutes les valeurs associées dans un énorme appel de fonction, je suggère de créer une méthode static
qui renvoie l'objet créé. Cette valeur par défaut pour la couleur était plutôt étrange. Je l'ai changé.
l'origine est au centre de chaque forme
Quoi qu'il en soit, vous les utilisez comme tout DisplayObject
: créer une instance et de l'ajouter à un DisplayObjectContainer
. C'est le point important. Ils se fondent dans l'API qui est déjà en place. Votre code de ligne de temps pourrait maintenant regarder quelque chose comme ça:
import ezd.easydraw.EasyDraw;
stop();
var circle:Circle = new Circle(300, 0xff00);
circle.x = circle.y = 300;
addChild(circle);
Maintenant, si vous voulez ajouter le cercle à un conteneur, un Sprite
fera très bien:
import ezd.easydraw.EasyDraw;
stop();
var container:Sprite = new Sprite();
addChild(container);
var circle:Circle = new Circle(300, 0xff00);
circle.x = circle.y = 300;
container.addChild(circle);