Frage zu AS 2

met

Erfahrenes Mitglied
Hallo,

hat jemand ne Ahnung, warum das Programm nur bis "ID++" ausgeführt wird?

Code:
class Application
{
	function Application ()
	{
		trace ("Application wird gestartet");
		MenuButton.CreateButton (_root, "Test");
	}
}

class MenuButton extends MovieClip
{
	static var ID:Number = 0;
	private var PosX:Number = 10;
	private var PosY:Number = -20;
	private var Caption:String = "Test";
	function MenuButton ()
	{
		trace ("MenuButton_" + ID + " wird erstellt");
	}
	static function CreateButton (target:MovieClip, Text:String):MenuButton
	{
		trace ("Test");
		ID++;
		return MenuButton (function ():MenuButton
		{
			trace ("Test2");
			var mc:MenuButton = MenuButton (target.attachMovie ("MenuButton", "MenuButton_" + ID, ID));
			Caption = Text;
			mc._x = PosX;
			mc._y = PosY;
			PosY = 10 + 20 * (ID - 1);
			return mc;
		});
	}
	function onEnterFrame ()
	{
		_x += (PosX - _x) / 16;
		_y += (PosY - _y) / 16;
	}
}
 
Hi,

Dein Konstrukt macht auf den ersten Blick einen recht verworrenen Eindruck: Warum erstellst Du in einer statischen Funktion ein Objekt der Klasse?

Du rufst in der statischen Methode den Konstruktur der Klasse auf (der keine Parameter verlangt), und zwar mit einer Funktion, die ein Objekt dieser Klasse zurückgibt, indem sie wieder diesen Konstruktur aufruft. Klingt für mich nach einem ziemlichen Typ-Mischmasch.

Was willst Du eigentlich erreichen?

Gruß

P.S.: Übrigens solltest Du in einer statischen Funktion eigentlich nicht auf die Klassenvariable ID zugreifen können, wenn ich das richtig sehe.
.
 
Hallo,

ich will durch den Aufruf der CreateButton Funktion eine neue Instanz meiner Klasse erhalten. Der Instanz sollen gleich die PosX und PosY zugewiesenwerden und der Text in einem Textfeld im Symbol geändert werden.

z.B.:
var mc:MenuButton = MenuButton.CreateButton(_root,"Test");
 
Hi,

wenn Du ein Objekt der Klasse zurückbekommen möchtest, brauchst Du doch keine statische Methode zu bemühen: Der Konstruktor tuts doch auch (dafür ist er schließlich da;)):
Code:
class MenuButton {
	public var _instance:MovieClip;
	static var id:Number = 0;
	static var PX:Number = 20;
	static var PY:Number = 20;
	static var HEIGHT:Number = 50;
	public function MenuButton(__target:MovieClip, __title:String) {
		_instance = __target.attachMovie("MenuButton", "MenuButton_" + id, __target.getNextHighestDepth());
		_instance.textfeld.text = __title;
		_instance._x = PX;
		_instance._y = PY + (id * HEIGHT);
		id ++
	}
}

Gruß
.
 
Zurück