OOP und zeichnen

Magixo

Grünschnabel
Hallo,

ich hab eine "kleine" Verständnis-Schwierigkeit. Evt. kann mir hier einer helfen.

Also ich habe eine Rechteck.as und eine Rechteck.fla

Code:
package {
	public class RechteckTisch {
		var square_mc:MovieClip;
		var xstart:int;
	  	var ystart:int;
		var xende:int;
		var yende:int;
		
		public function RechteckTisch(var1:int,var2:int,var3:int,var4:int) {
			
			this.xstart = var1;
			this.ystart = var2;
			this.xende  = var3;
			this.yende  = var4;
		}
		
		public function zeichnen (cliptoDrawin:MovieClip) {
		    cliptoDrawin.createEmptyMovieClip("square_mc", cliptoDrawin.getNextHighestDepth());
		    this.square_mc = cliptoDrawin.square_mc;
			this.square_mc.beginFill(0xFF0000);
			this.square_mc.moveTo(xstart, ystart);
			this.square_mc.lineStyle(1, 0xFF0000);
			this.square_mc.lineTo(xstart, yende);
			this.square_mc.lineTo(xende, yende);
			this.square_mc.lineTo(xende, ystart);
			this.square_mc.lineTo(xstart, ystart);
			this.square_mc.endFill(); 
		}
	}
}

Code:
var re1:RechteckTisch = new RechteckTisch(10,20,40,50);
re1.zeichnen(stage);

Leider klappt dies noch nicht. Bekomme auch den Fehler: 1046: Typ wurde nicht gefunden oder war keine Kompilierungszeit-Konstante: MovieClip.

Hab schon nach einer Lösung gesucht, aber nichts vernünftiges gefunden.

Vielleicht kann mir ja hier einer helfen.

Bin für jeden Hinweis dankbar!

Edit: Verwende Actionscript 3
 
Zuletzt bearbeitet:
ja, soweit war ich gestern auch schon.. aber dann bekomm ich den neuen Fehler, dass er nicht von einer Stage zum Movieclip wandeln kann.. hab versucht das immer weiter auszumerzen, aber jetzt steh ich hier:

Code:
package {
	import flash.display.MovieClip;
	import flash.display.Stage;
	import flash.display.Graphics;
	public class RechteckTisch {
		var square_mc:MovieClip;
		var xstart:int;
	  	var ystart:int;
		var xende:int;
		var yende:int;
		
		public function RechteckTisch(var1:int,var2:int,var3:int,var4:int) {
			
			this.xstart = var1;
			this.ystart = var2;
			this.xende  = var3;
			this.yende  = var4;
		}
		
		public function zeichnen (square_mc:Stage) {
		   // cliptoDrawin.createEmptyMovieClip("square_mc", 3);
		    //this.square_mc = cliptoDrawin.square_mc;
			square_mc.graphics.beginFill(0xFF0000);
			square_mc.graphics.moveTo(xstart, ystart);
			square_mc.graphics.lineStyle(1, 0xFF0000);
			square_mc.graphics.lineTo(xstart, yende);
			square_mc.graphics.lineTo(xende, yende);
			square_mc.graphics.lineTo(xende, ystart);
			square_mc.graphics.lineTo(xstart, ystart);
			square_mc.graphics.endFill(); 
		}
	}
}

1119: Zugriff auf eine möglicherweise nicht definierte Eigenschaft graphics über einen Verweis mit statischem Typ flash.display:Stage

das geht dadurch auch nicht.. bin mittlerweile total überfragt..
 
Das erste Beispiel sah soweit schon korrekt aus. Du musst ihm dann natürlich an die Funktion zeichnen 'ne MovieClip Instanz übergeben und nicht das Stage objekt. Das hat keine graphics Eigenschaft und deshalb kriegst du da in dem letzten Beispiel die Fehlermeldung:
1119: Zugriff auf eine möglicherweise nicht definierte Eigenschaft graphics über einen Verweis mit statischem Typ flash.display:Stage .

Ich entwickel sowas immer mit dem Flex Builder, kann ich nur empfehlen. Der macht die ganzen Imports automatisch und in der autocomplete Funktion siehst du auch direkt, welche Objekte und Eigenschaften vorhanden sind. Kann das Flash das nicht? Der würd dir dann beim stage Objekt direkt anzeigen, dass da kein graphics object existiert. Kann ich sehr Empfehlen den Builder.
 
ach, danke.. mit noch mal ganz viel rumprobieren hab ichs jetzt...

Code:
var re1:RechteckTisch = new RechteckTisch(10,20,40,50);
var squar:MovieClip = new MovieClip();

re1.zeichnen(squar);
stage.addChild(squar);


Code:
package {
	import flash.display.MovieClip;
	import flash.display.Stage;
	import flash.display.Graphics;
	public class RechteckTisch {
		var square_mc:MovieClip;
		var xstart:Number;
	  	var ystart:Number;
		var xende:Number;
		var yende:Number;
		
		public function RechteckTisch(var1:Number,var2:Number,var3:Number,var4:Number) {
			
			this.xstart = var1;
			this.ystart = var2;
			this.xende  = var3;
			this.yende  = var4;
		}
		
		public function zeichnen (cliptoDrawin:MovieClip) {
		   var square_mc:MovieClip = new MovieClip();
		   cliptoDrawin.addChild(square_mc);
		   this.square_mc = cliptoDrawin.square_mc;
			square_mc.graphics.beginFill(0xFF0000);
			square_mc.graphics.moveTo(xstart, ystart);
			square_mc.graphics.lineStyle(1, 0xFF0000);
			square_mc.graphics.lineTo(xstart, yende);
			square_mc.graphics.lineTo(xende, yende);
			square_mc.graphics.lineTo(xende, ystart);
			square_mc.graphics.lineTo(xstart, ystart);
			square_mc.graphics.endFill(); 
		}
	}
}

fehlerfrei und as3 konform :)
 
noch eine kurze frage.. ich würd gern dynamische variablenamen setzen.. also jedes RechtecktischObjekt brauch nen eigenen namen..

habe jetzt

Code:
var ["ret"+tischzaehler]:RechteckTisch = new RechteckTisch(var1,var2,var3,var4);
tischzaehler++;

das geht leider nicht.. meine suche war auch nicht erfolgreich.. alle möglichkeiten versucht..

var "ret"+tischzaehler:RechteckTisch = ..
var "ret"+[tischzaehler]:RechteckTisch = ..
usw..
 
Du könntest deine Tische in ein Array Schreiben:
Code:
var arrTische:Array = new Array();

for (var i:int=0;i<10;i++){
  arrTische.push (  new RechteckTisch(var1,var2,var3,var4) );
}

Und danach kannst du jeden Tisch mit arrTische[n] aufrufen
 
Zuletzt bearbeitet:
ja, danke so ähnlich hab ichs jetzt auch gemacht..
Code:
var ret:RechteckTisch = new RechteckTisch(var1,var2,var3,var4);
tischarray[tischzaehler] = ret;
tischzaehler++;
 
soo mal wieder ein neues problem..

ich setz auf dieses sprite ein eventlistener bei MouseDown und mouseUP

Code:
function test2(ev:MouseEvent) {
   ev.target.stopDrag();
}

damit beweg ich das sprite und das darin liegende objekt.. jetzt will ich aber aufs objekt zugreifen und die x und y werte neu setzen.

trace(ev.target.getChildAt(0));

das klappt leider nicht.. Kann mir einer eine andere möglichkeit sagen, wie ich vom sprite zum rechteckttisch objekt komme ?

ev.target.numChildren gibt auch 0 aus.. obwohl ich es mit addChild ja hinzufüge..

evt. liegt im sprite auch noch ein sprite und dann darin das objekt.. aber dann müsste ja getChildAt trotzdem ein Objekt ausgeben, aber es kommt nur: Der angegebene Index liegt außerhalb des zulässigen Bereichs.
 
Zuletzt bearbeitet:
Problem hat sich geklärt, war einfach nur falsch programmiert. Die Function zum verschieben muss natürlich in die Rechteck.as rein..

Jetzt hab ich noch eine neue Frage, gibt es eine function wie StartDrag(), nur nicht zum verschieben, sondern zum vergrößern, sodass der User selber die größe dynamisch verändern kann

Danke
 
Zurück