AS3.0 Linie zwischen zwei Objekten zeichnen

hugo1981

Erfahrenes Mitglied
Hallo @ll,

ich versuche verzweifelt, eine Linie zwischen zwei Objekten zu zeichnen, nachdem das eine Objekt auf ein anderes gezogen wurde. Das gezogene Objekt wird zum Ursprung bewegt, und danach wird die Zeichenmethode aufgerufen. Allerdings passiert bei mir gar nichts :(

Die Objekte und Koordinaten werden laut meinem trace korrekt üergeben. Wisst ihr was ich hier falsch mache oder was noch fehlt?

Code:
package helper{
	
	import flash.display.*;
	import flash.display.Sprite;
	import flash.display.LineScaleMode;
	import flash.display.CapsStyle;
	import flash.display.Shape;
	
	public class Drawer extends Sprite{
		
		public function Drawer(){
			
		}
		
		public function drawToScreen(from_mc:Object, to_mc:Object){
			
			var line:Shape = new Shape();
			
			line.graphics.lineStyle(5);
			line.graphics.moveTo(from_mc.x, from_mc.y);
			line.graphics.lineTo(from_mc.x, from_mc.y);
			line.graphics.lineTo((to_mc.x/2), (to_mc.y /2));
			
			addChild(line);
			trace("try to draw a line from " + from_mc.tiptext + "x: " +from_mc.x + " y: "+from_mc.y);
			trace("try to draw a line to " + to_mc.label_txt.text+ "x: " +to_mc.x + " y: "+to_mc.y);
			
			
		}
		
		
	}	
}

Vielen lieben Dank im Voraus..

lg,
hugo
 
Hallo,

das scheint alles korrekt zu sein. Bist du dir sicher, dass die Koordinaten, die gezeichnet werden sollen, auch im Bereich der Bühne liegen? Eventuell eine Diskrepanz zwischen den Ankerpunkten der Objekte und dieses Sprites?

Ich empfehle dir ausserdem stärker zu typisieren. Wenn du auf x- bzw. y-Eigenschaften zugreifst, gehst du zwangsläufig von einem DisplayObject aus.

Gruss
 
Hi Luke,

danke, dass du da bist :) hier das Ergebnis meines trace. Könnte es ein Problem sein, dass die x,y Werte keine ganzen Zahlen sind? (Ist mir grad eben aufgefallen) Wie kann ich die auf solche Casten?

Mein Trace:
Code:
try to draw a line from ButtonMC x: 618.95 y: 435.95000000000005
try to draw a line to Screen2 x: 319.35 y: 493.85
transition Object set to: [object MyScreen]

Wie kann ich auf die Werte zugreifen, ohne .x und .y? Wo könnte ich noch stärker typisieren?
 
Hallo,

x- und y-Eigenschaft des DisplayObjects sind vom Typ Number, welcher Fliesskomma-Zahlen zulässt, das sollte kein Problem sein. Strenger typisieren kannst du, indem du die Argumente als DisplayObject's oder gar Sprites beschreibst. Warum du die Linien nicht siehst kann ich ohne Beispiel nur vermuten. Poste doch mal relevante Auszüge deiner fla.

Gruss
 
echt zum verrückt werden :(

das ist die Klasse aus der ich die Methode aufrufe:
Code:
package elements{

	import flash.display.MovieClip;
	import flash.events.MouseEvent;
	import flash.events.Event;
	import helper.*;
	

	public class Moveables extends MovieClip {


		//later this variables will become private
		// this is sufficient for testing
		public var myTarget:String;
		
		//this Array (for now Object, since one is sufficient) represents the MC (e.c Screen) TO which this MC transits
		public var transitionTarget:Object;
		
		//this Array represents the MC, ON which THIS MC lays
		public var assignedTo:Array;
		public var tiptext:String;
		
		//this Array represents to MCs which are assigned to this one
		public var assigned:Array = [];
		
		private var dragging:Boolean = false;
		
		private var oldX:Number;
		private var oldY:Number;
		
		
		private var moving:Boolean = false;
		
		private var diffX:Number;
		private var diffY:Number;
		
		private var help_obj:Drawer = new Drawer();
		
		public function Moveables() {
			assignedTo = new Array();
			this.buttonMode = true;
			this.useHandCursor = true;

		}
		
		public function setTransitionTarget(me_mc:Object, target_mc:Object){
			this.transitionTarget = target_mc;
			
			//draw Line from button to the Target!
			help_obj.drawToScreen(me_mc, target_mc);
		}
}
}

und dieser Code liegt im .fla. auf der "actionEbene"
Code:
if (transitionTarget_ar.length > 0) {
		var dropMC = getChildByName(iconEvent.target.dropTarget.parent.name);			
					for (var i=0; i < transitionTarget_ar.length; i++) {
						if ( dropMC == transitionTarget_ar[i]) {
							iconEvent.target.x = StartX;
							iconEvent.target.y = StartY;
							iconEvent.target.setTransitionTarget(iconEvent.target, transitionTarget_ar[i]);
							trace("transition Object set to: "+iconEvent.target.transitionTarget);

						}
					}
				}

Nach den Trace Ausgaben, wird alles korrekt übergeben.
 
Hi,,

jetzt kriege ich endlich einen Strich :)

Ich musste den Strich einem DisplayObjectContainer hinzufügen ( ich nahm einfach das überlieferte Object, und fügte dem den Strich mit addChild() hinzu);

Jetzt habe ich das Problem, dass die linie extrem versetzt gezeichnet wird.. so ca. .x + 500 und y dasselbe :(

Das funktioniert jetzt:
Code:
public class Drawer extends Shape {

		var _line2:Shape = new Shape();
		var refenrenceObj:Object;

		public function Drawer() {
				
		}
		private function addLine() {
			refenrenceObj.addChild(_line2);
		}
		public function drawToScreen(from_mc:Object, to_mc:Object) {




			_line2.graphics.lineStyle(9,125,0.6);
			_line2.graphics.moveTo(from_mc.x, from_mc.y);
			//_line.graphics.lineTo(from_mc.x, from_mc.y);
			_line2.graphics.lineTo(to_mc.x, to_mc.y);
			this.refenrenceObj = from_mc;
			addLine();
			//_line.graphics.lineTo(mouseX, mouseY);
			//addChild(_line);
			trace("trace line: "+_line2);
			trace("try to draw a line from " + from_mc.tiptext + " x: " + from_mc.x + " y: "+from_mc.y);
			trace("try to draw a line to " + to_mc.label_txt.text+ " x: " +to_mc.x + " y: "+to_mc.y);
			//trace(mouseX, mouseY);

		}
	}

Ich habe die vermutung, dass diese Werte vom ersten entsprechenden Objekt, dass auf der Bühne lag /liegt übernommen werden. Weiss aber nicht, wie ich das verbessern kann. Müssten nicht die aktuellen Werte des aktuellen Objects ausschlaggebend sein?
 

Neue Beiträge

Zurück