Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 07-08-2006, 14:54   #1 (permalink)
Neuer User
 
Registriert seit: Mar 2006
Beiträge: 7
mouseClick queue

Hallo Zusammen,

nach längerem Überlegen und keiner Lösung wende ich mich voller Zuversicht an euch!
Ich habe folgendes Problem:
Bei einem dynamischen FlashMovie können verschiedene Buttons vom Benutzer gedrückt werden. Da es bei manchen Buttons zu komplizierteren Abläufen kommt, kann die Durchführung etwas dauern. Dadurch kann der Benutzer sich genötigt fühlen, auf weitere Button zu drücken, weil er denkt es passiert nichts.
Wie kann ich verhindern, dass diese Events danach nicht auch noch ausgeführt werden?
Also in etwa so:
while ( die aktion des letzten events noch bearbeitet wird ) {
ignoriere alle weiteren events vom benutzer }

Versucht hab ich das schon mit einer Boolean-Variable, die jeweils gesetzt wird, wenn eine Aktion läuft. Da Flash die ClickEvents aber scheinbar intern in einer queue abspeichert und dann nacheinander aufruft, hatte ich damit keinen erfolg .

Kann mir hier jemand helfen? Vielleicht, wie man auf diese queue zugreift?!

Danke.
Philipp
phil_heim ist offline   Mit Zitat antworten
Alt 07-08-2006, 14:57   #2 (permalink)
Der Wunderhund
 
Benutzerbild von gaspode
 
Registriert seit: Jun 2002
Ort: Hattingen
Beiträge: 10.515
Hi.

Die einfachste Möglichkeit wäre alle restlichen
Buttons zu disablen, während die Buttonaktion läuft,
per deinButton.enabled = false;

gruß, gaspode
gaspode ist offline   Mit Zitat antworten
Alt 07-08-2006, 15:08   #3 (permalink)
Neuer User
 
Registriert seit: Mar 2006
Beiträge: 7
Zitat:
Zitat von gaspode
deinButton.enabled = false;
Danke für die schnelle Antwort!!!
Ich hab das mal ausprobiert, komme aber zu keinem zufriedenstellenden Ergebnis. Vielleicht kannst du dir meinen Code mal anschauen:

Code:
function doSomething(){
	blue1.enabled = false;
	trace("----START-----");
	trace("klick");
	var i = 0;
	while(i < 10000){
		var x = Math.cos(i) + Math.sin(i);
		i++;
	}
	trace("----END----");
	blue1.enabled = true;
}

blue1.onPress = doSomething;
Wenn ich jetzt so schnell ich kann auf den Button drücke, kommen die Ausgaben zwar verzögert, aber immer genau in der Anzahl meiner Klicks!?
Es scheint, als würde der Ausdruck "blue1.enabled = false;" gar nicht greifen, da auch kein neues Frame betreten wird, innerhalb eines onPress() Funktionsaufrufs.

??

Geändert von phil_heim (07-08-2006 um 15:09 Uhr)
phil_heim ist offline   Mit Zitat antworten
Alt 07-08-2006, 15:10   #4 (permalink)
Neuer User
 
Benutzerbild von tsdrummer
 
Registriert seit: Aug 2001
Ort: München
Beiträge: 1.162
Zitat:
Zitat von phil_heim
Danke für die schnelle Antwort!!!
Ich hab das mal ausprobiert, komme aber zu keinem zufriedenstellenden Ergebnis. Vielleicht kannst du dir meinen Code mal anschauen:

Code:
function doSomething(){
	blue1.enabled = false;
	trace("----START-----");
	trace("klick");
	var i = 0;
	while(i < 10000){
		var x = Math.cos(i) + Math.sin(i);
		i++;
	}
	trace("----END----");

blue1.enabled = false;
}

blue1.onPress = doSomething;
Wenn ich jetzt so schnell ich kann auf den Button drücke, kommen die Ausgaben zwar verzögert, aber immer genau in der Anzahl meiner Klicks!?
Es scheint, als würde der Ausdruck "blue1.enabled = false;" gar nicht greifen, da auch kein neues Frame betreten wird, innerhalb eines onPress() Funktionsaufrufs.

??
a
tsdrummer ist offline   Mit Zitat antworten
Alt 07-08-2006, 15:15   #5 (permalink)
Neuer User
 
Registriert seit: Mar 2006
Beiträge: 7
Zitat:
Zitat von tsdrummer
a
äh, dann kann ich den Button ja gar nicht mehr drücken!!
Das will ich ja auch nicht. Er soll solange die Aktion andauert nicht gedrückt werden können, danach jedoch schon!!

??
phil_heim ist offline   Mit Zitat antworten
Alt 07-08-2006, 15:28   #6 (permalink)
Neuer User
 
Registriert seit: Mar 2006
Beiträge: 7
ich hab eine lösung... auch wenn es wahrscheinlich nicht die beste ist:

Code:
var runs:Boolean = false;

function doSomething(){
	blue1.enabled = false;
	trace("----START-----");
	trace("klick");
	
	var i = 0;
	while(i < 10000){
		var x = Math.cos(i) + Math.sin(i);
		i++;
	}
	trace("----END----");
}

_root.onEnterFrame = function(){
	trace("frame");
	if(runs){
		blue1.enabled = true;
		runs = false;
		trace("runs = false & blue1 = enabled");
	}
	if(blue1.enabled == false && runs == false){
		runs = true;
		trace("runs = true");
	}
}

blue1.onPress = doSomething;
somit wird beim ersten Frame nach dem Klicken des Buttons das "enabled = false" ausgeführt und verhindert in diesem Frame, dass die gespeicherten Klicks auf diesem Button nachträglich ausgeführt werden.
Ab dem zweiten Frame kann der Benutzer dann wieder drücken.
Dadurch habe ich zwar eine verzögerung von einem Frame , die nicht notwendig wäre, aber etwas besseres fällt mir nicht ein!

Philipp
phil_heim ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 23:29 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele