[Flash 8] gestrichelte Linien...

Hi,

alles, was mit "on(" begint, kann nur auf Objektinstanzen (MovieClips oder Schaltflächen) notiert werden - es handelt sich um spezielle Objektereignisse.

Willst Du einen Tastendruck mit Code abfragen, der auf einer Zeitleiste steht, solltest Du einen Key-Listener bemühen:
Code:
var kl = new Object();

kl.onKeyDown = function() { // alternativ auch "onKeyUp" - je nach Gusto)
    var c = Key.getCode();
    if (c == 87) { // Tastencode für "w"
        // mach was
    }
}

Key.addListener(kl);

Gruß
.
 
Also nen Script, was ständig aktiv ist und auf ne eventuelle Tasteneingabe wartet.

Um es mit meinen Worten näher zu beschreiben:

"kl" wird als neues Objekt initialisiert und im weiteren Schritt wird der Eigenschaft "onKeyDown" von "kl" -- sprich kl.onKeyDown -- eine Funktion zugeordnet, die ein paar Befehle abarbeitet.

Nun nur noch die in der Funktion beschriebenen Aktionen zum Listener übertragen mit Key.addlistener(kl);

Ist des so richtig begriffen?
 
Hallo,

du sprichst nicht bei allen Zeichnungsanwendungen deine "zeichnungsebene" an. Vergleich mal diesen Code-Block mit deinem Skript:

Code:
function startDraw() {
	this._parent.zeichenebene.moveTo(this._x, this._y);
	this._parent.zeichenebene.lineStyle(2, 0xDD2B04, 75);
	c = 0;	
	this.onEnterFrame = function() {
		c++;
		if (this._parent.dashed && c % 2 == 0) {
			_parent.zeichenebene.moveTo(this._x, this._y);
		} else {
			_parent.zeichenebene.lineTo(this._x, this._y);
		}
	}
}

gruss
 
stimmt... Da hast Du allerdings Recht. Ich sollte mir das mit den Regeln für die unterschiedlichen Bezeichner noch mal genauer ansehen "this, _parent, _root"

Diese sind vermutlich auch das Problem meines eingefügten Scripts an Frame(1) in der Code-Ebene der Szene, dass die Animation an jeder Stelle wiederholen soll, wenn ich die Taste "w" drücke.

Code:
var kl = new Object();  // "kl" als neues Objekt initialisieren
kl.onKeyDown = function() { // alternativ auch "onKeyUp" - je nach Gusto
    var keyId = Key.getCode(); // taste drücken und key-code feststellen
    if (keyId == 87) { // Tastencode für "w" mit dem key-code der eingabe vergleichen
		this._root.zeichenebene.clear();        // tu wat fürt jeld
		gotoAndPlay('Szene 1', 1);
    }
}
Key.addListener(kl);

Vermutlich weiß er nicht genau, was er dort eigentlich "clearen" soll. :confused:

--> .fla -- http://www.tobyatwork.de/2d-worxx/flash/ba1/BA_1-f01_.fla
 
sodele...

Das Problem mit der Wiederholung und dem Neu-Zeichnen hab ich in den Griff bekommen. Der Aufruf der Funktion clear(); war falsch.

Code:
_root.zeichenebene.clear();

wäre richtig gewesen, ohne this

------------------

Nun zum nächsten Punkt ;)

Drücke ich an einer Stelle, wo gerade die gestr. linie gezeichnet wird "w", so fängt er zwar neu an, allerdings mit ner gestr. Linie, was eigentlich so nicht sein soll.
Das ist noch nicht allzu tragisch.

Interessanter finde ich da das Problem der Abstände innerhalb der gestr. Linie. Erhöhe ich beispielsweise die Linien-Breite auf 15px, so verschwimmen die Abstände derart, dass ich keine gestrichelte Linie mehr sehe. Im Moment fällt mir kein anderer Lösungsansatz ein, als eine transformation von _x und _y vorzunehmen in Abhängigkeit der Strichstärke. Nur wie muss die aussehen?

Zum Vergleich, hier meine .fla && .swf
--> .fla -- http://www.tobyatwork.de/2d-worxx/flash/ba1/ba1_2px.fla
--> .swf -- http://www.tobyatwork.de/2d-worxx/flash/ba1/ba1_2px.swf
 
sodele -- Filmchen ist endlich fertig :)

-- Taste "w" sorgt für eine Wiederholung zu jedem Zeitpunkt
-- Mausklick mit der linken Maustaste hat den gleichen Effekt wie Taste "w"
-- Pfad wird zu jeder Zeit sauber nachgezeichnet
-- Wartezeit von 3 Sekunden eingefügt durch setInterval();
PHP:
warten = setInterval(timer, 3000);
function timer() {
    wegzeichner.startDraw();
    _root.play();
    clearInterval(warten);
}

Hier mal zum Vergleich. C&C welcome.
--> .swf -- http://www.tobyatwork.de/2d-worxx/flash/ba1/BA_1-f01.swf
--> .fla -- http://www.tobyatwork.de/2d-worxx/flash/ba1/BA_1-f01.fla

p.s.: Das mit den Abständen der "gestrichelten" Linie bei der dicke des gezeichneten Pfades zwar immer noch net, ist aber erstmal egal. ;)
 
Hallo,

mit der Synchronisation gits da noch Probleme. Der erste Abschnitt des Pfades, also die gefüllte rote Linie wird z.T. nicht gezeichnet. Ausserdem kam es bei mir vor, dass statt einem moveTo zum Ausgangspunkt ein lineTo ausgeführt wurde. Das Resultat: Eine fette rote Linie vom End- zum Startpunkt.

gruss
 
Nach ein paar mal drücken von "w" und der Maustaste muss ich das leider auch feststellen. :mad: -- So ein Käse. Lang dran herumgefrickelt und nu des... *arg*
Er scheint Probleme damit zu haben, wenn man des Klicken und Drücken von "w" sehr schnell hintereinander und durcheinander macht. Bleibt die Frage, woran das wohl liegen mag ?(
 
Zuletzt bearbeitet:
Hallo,

ich hab nun geschlagene 10 Minuten versucht, den Fehler auszudeutschen und ich bin gescheitert. Da war alles ein bisschen durcheinander, besonders die Intervall-Geschichte, deshalb lasse ich besser den Code für sich sprechen.

Code:
var delay = 120;
var dashed = 0;
//--------------------------------------------------------------------------------------------//
var key_w = new Object();  // "kl" als neues Objekt initialisieren
key_w.onKeyDown = function() { // alternativ auch "onKeyUp" - je nach Gusto
    var keyId = Key.getCode(); // taste drücken und key-code feststellen
    if (keyId == 87) { // Tastencode für "w" mit dem key-code der eingabe vergleichen
		zeichenebene.stopDraw();
		zeichenebene.clear();// tu wat fürt jeld
		gotoAndPlay(1);
    }
}
Key.addListener(key_w);
//---------------------------------------------------------------------------------------------//
var mouse_press = new Object();
mouse_press.onMouseDown = function() {
    _root.zeichenebene.stopDraw();
    _root.zeichenebene.clear();
    _root.gotoAndPlay(1);
}
Mouse.addListener(mouse_press);
//---------------------------------------------------------------------------------------------//
stop();
onEnterFrame = function () {
	if (delay > 0) delay--;
	else {
		wegzeichner.startDraw();
		play();
		delete onEnterFrame;
	}
}

gruss

PS: Das mag nun eine Auffassungsfrage sein, aber ich würd mich ärgern, wenn ich erst 3 Sekunden auf die Animation warten müsste.
 

Neue Beiträge

Zurück