Problem bei Klasse mit lineTo()

oaki

Erfahrenes Mitglied
Hi zusammen,

Ich arbeite mich jetzt ein bisschen in OOP rein und hab nun versucht, eine Klasse zu programmieren, mit der ich entweder vertikale oder horizontale Linien zeichnen kann.
Die Funktion erwartet 4 Parameter: startX, StartY, endX, endY um die Linie zeichnen zu können.

Das Problem ist nun, das bei einem negativen Wert auf einer Achse z.B endX = -120
wird die onEnterFrame Funktion nicht gestoppt, da ich keine Ahnung habe wie ich prüfen könnte ob lineTo die Koordinate erreicht hat.

Hat jemand evtl. eine Ahnung oder einen Tip?

Gruss

Hier die Klasse:
Code:
class drawOneLine extends MovieClip {
	var startX:Number = 10;
	var startY:Number = 10;
	var endX:Number = 400;
	var actualLength:Number = 1;
	var growSpeed:Number = 3;
	public function drawit(startX, startY, endX, endY) {
		trace("function called");
		if (startX < endX) {
			this.onEnterFrame = function() {
				trace("plus");
				if ((endX - startX) != actualLength) {
					this.clear();
					this.lineStyle(1, 0x000000, 100);
					this.moveTo(startX, startY);
					this.lineTo(startX + actualLength, startY);
					actualLength += growSpeed;
				}
			};
		}
	}
}
 
Hallo,

wenn du von der Ziel-Koordinate (z.B. endX) den aktuellen x-Wert (actualLength) subtrahierst, diesen Wert dann auf 0 prüft und bei Erfüllen dieser Bedingung die Schlaufe unterbrichst, sollte das dein Problem lösen.

Ein kleiner Tipp:

Ich würd nicht zwischen horizontalen und vertikalen Linien unterscheiden, sondern einfach in jedem Fall den x-Startwert bzw. y-Startwert zum x-Endwert bzw. y-Endwert rechnen. So kannst du deine Vektoren in jede beliebige Richtung zeichnen lassen.


gruss
 
Zuletzt bearbeitet:
Hi,

Vielen Dank! Leider funktioniert es immer noch nicht ganz. Ich kann nach wie vor nur Linien von links nach rechts zeichnen, von rechts nach links geht überhaupt nichts..
Irgendwie will mein Gehirn die Lösung einfach nicht finden!
 
Hallo,

damit solltest du in jedem MovieClip mit gleichbleibender Geschwindigkeit Linien zeichnen können:

Code:
MovieClip.prototype.drawSteadyLine = function (speed, startX, startY, endX, endY, thickness, color, alpha) {
	
	var currentX = startX;
	var currentY = startY;
	
	var xDif = endX-startX;
	var yDif = endX-startX;
	
	var xStep = xDif/speed;
	var yStep = yDif/speed;
	
	
	
	this.onEnterFrame = function () {
		
		currentX += xStep;
		currentY += yStep;
		
		xDif = endX - currentX;
		yDif = endY - currentY;
		
		clear();
		lineStyle(thickness, color, alpha);
		moveTo(startX, startY);
		lineTo(currentX, currentY);
		
		if (xDif < 1 && yDif < 1) delete this.onEnterFrame;
	}
}

meinMovieClip.drawSteadyLine (20, 40, 40, 300, 300, 3, 0xff6622, 100);

Mit dem hier zeichnest du mit abbbremsender Geschwindigkeit:

Code:
MovieClip.prototype.drawSlowingLine = function (speed, startX, startY, endX, endY, thickness, color, alpha) {
	
	var currentX = startX;
	var currentY = startY;	
	var xDif;
	var yDif;

	
	
	this.onEnterFrame = function () {
		
		xDif = endX - currentX;		
		yDif = endY - currentY;
		
		xDif *= speed;
		yDif *= speed;
		
		currentX += xDif
		currentY += yDif
		
		clear();
		lineStyle(thickness, color, alpha);
		moveTo(startX, startY);
		lineTo(currentX, currentY);
		
		
		if (xDif < 1 && yDif < 1) delete this.onEnterFrame;
	}
}

meinMovieClip.drawSlowingLine (.5, 40, 40, 300, 300, 3, 0xff6622, 100);

Hinweis: Bei der gleichförmigen Zeichnung stellt der speed-Wert die Anzahl Schritte dar, darum solltest du da möglichst einen Wert über 0 und ausserdem eine Ganzzahl angeben. Beim unteren Beispiel hingegen wird für speed eine Zahl zwischen 0 und 1 benötigt.

gruss
 
Zurück