Linien zeichnen: nacheinander

harrry

Erfahrenes Mitglied
Hallo,
habe zwischendurch eine Frage zu Lukes Linien-Prototype:
Ich würde gern die Linie, die sich bildet, gelegentlich abbiegen lassen oder ums Eck zu einem neuen Ziel schicken... und habe mir gedacht, das geht vielleicht so:
PHP:
//===========================================
//PROTOTYPE STEADY LINE
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;
        }
    };
};

//===========================================
weiter = function () {
    if (myClip._x>=299) {
        myClip.drawSteadyLine(50, 300, 300, 400, 200, 3, 0xff6622, 100);
    }
};
//===========================================
myClip.drawSteadyLine(50, 40, 40, 300, 300, 3, 0xff6622, 100);
weiter();
Aber nein, geht nicht. Wie muss man denn tun? Oder gibt es gar eine Lösung, bei der man mehrere Zielkordinaten angibt, die dann nacheinander angesteuert werden?

Liebe Grüße H.
 
Hi,

Du rufst ja die Funktion "weiter" nur einmal (und zwar sofort) auf, und zu diesem Zeitpunkt ist die Bedingung (myClip._x>=299) noch nicht erfüllt.

Du musst diese Bedingung dauerhaft prüfen. Verwende dafür eine onEnterFrame-Methode oder ein Intervall.

Für Deine Zwecke wäre allerdings eine Callback-Methode eleganter, die ausgeführt wird, sobald die erste Linie fertig gezeichnet ist:
Code:
MovieClip.prototype.drawSteadyLine = function(speed, startX, startY, endX, endY, thickness, color, alpha, _cb) {
    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;
            _cb();
        }
    };
};

//===========================================
weiter = function () {
    myClip.drawSteadyLine(50, 300, 300, 400, 200, 3, 0xff6622, 100);
};
//===========================================
myClip.drawSteadyLine(50, 40, 40, 300, 300, 3, 0xff6622, 100, weiter);

Gruß
.
 
Mensch, klar, die Bedingung muss in Schlaufe laufen. Aber was nun ist, ist, dass die erste Linie verschwindet, sobald die zweite anfängt, aber es soll doch alles stehn bleiben...
 
Hi,

dafür müsste die clear()-Methode aus dem Prototype entfernt werden. Da dieser die Linie allerdings bei jedem Schritt komplett neuzeichnet, kann es dadurch zu Grafikfehlern kommen.

Einfacher wäre es auf die Schnelle, für jede neue Linie einen neuen leeren MC zu verwenden. ;)

Gruß
.
 
Aha, dann mach ich es vielleicht mit Tweens und Pfaden, dann gehts auch in die Kurve... ich dachte, man kann vielleicht per AS so einen Pfad (die einzelnen Koordinatensätze) vorgeben --- aber wenn DU das kompliziert findest, dann sollt´ ich es wohl besser lassen :)

Lieben Dank (und... nein ich will gar nicht anfangen mit meinem anderen Posting... das mir unter den nägeln brennt... nein nein, hab nix gesagt...)
 
Nochmal wegen des Linien-Skripts: bin etwas verblüfft (Normalzustand), dass anscheinend keine Minuswerte funktionieren, also nach rechts und unten gehts, aber nach links und oben nicht... wieso das denn?
 
Zurück