PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bildschirm aktualisieren nach Verschieben eines Textfeldes


Diabolo
01.10.2007, 16:18
Hallo zusammen,

als Neueinsteiger in ActionScript auf Version 8.0 hab ich mich mal an folgendem probiert:

- 6 Textfelder stehen auf Bild1, Szene1 außerhalb des für den User sichtbaren Bereiches
- mit do...while() ändere ich die Position der Textfelder jeweils um 1 nach links
- Ziel ist es, einen Effekt zu erzielen, der aussieht als würde das Menü einfliegen

Dazu habe ich einen EventListener auf einen Button gesetzt. Bei Aufruf werden in der do...while-Schleife die Textfelder verschoben. Code:

import mx.controls.Alert;

var clickListener:Object = new Object();

clickListener.click = function(evt_obj:Object):Void{
trace(i);
txtMessage.text = "loading";
i=mnu1._x;
do {
CalculateX(i-1);
i = (i-1);
} while (i>50);
}

var moveListener:Object = new Object();

moveListener.move = function(evt_obj:Object):Void{
updateAfterEvent();
mnu1.redraw();
}

btnClick.addEventListener("click", clickListener);

//edit: die Funktion hatte ich vergessen einzufügen:

function CalculateX(intXNumber:Number) {
mnu1.move(intXNumber,mnu1._y);
mnu2.move(intXNumber,mnu2._y);
mnu3.move(intXNumber,mnu3._y);
mnu4.move(intXNumber,mnu4._y);
mnu5.move(intXNumber,mnu5._y);
mnu6.move(intXNumber,mnu6._y);
txtMessage.text = txtMessage.text + intXNumber + " "
return 0;
}

Leider wird die Schleife bis zum Ende durchlaufen, aber der Bildschirm nicht aktualisiert. Also von wegen einfliegen der Textfelder is nix.

Wie kann ich es erreichen, daß nach jedem Schleifendurchlauf der Bildschirm aktualisiert wird?

Mit .redraw() habe ich es bereits probiert.

Danke und viele Grüße,

Pascal


mnemonic
01.10.2007, 16:52
Das ist das typische Einsteigerproblem für Flashneulinge, also keine Panik. ;)


- mit do...while() ändere ich die Position der Textfelder jeweils um 1 nach links
Genau da liegt der Denkfehler. Der Effekt, den Du beobachtest ist, dass das Textfeld einen Sprung macht, wenn die Schleife abgelaufen ist.

Flash ist framebasiert, d.h. Du musst bei allem was Du tust an die Timeline denken. Updates werden immer im nächsten Frame dargestellt. Was Du vor hast musst Du entweder in einem onEnterFrame(.) Handler, oder mit einer Funktion, die via setInterval(.) aufgerufen wird, abarbeiten.

Du darfst halt keine Schleife benutzen um den Effekt darzustellen, sondern musst immer Schritt für Schritt (Frame für Frame) die Werte ändern.

Denk mal drüber nach, wenn Du Dir gar nicht vorstellen kannst, was ich meine, melde Dich nochmal und ich bau Dir ein Beispiel.

Eine nette Alternative ist auch die Tween Klasse (mx.transitions.Tween, IIRC).

HTH