• beyond tellerrand – play. Register Now!
Zurück   Flashforum > Flash > Flash Fortgeschritten > Flash CS3 Professional

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 16-07-2009, 12:13   #1 (permalink)
Neuer User
 
Registriert seit: May 2009
Beiträge: 27
Eventhandler interne Abarbeitung

Hallo,

bin auf der Suche meines Problems bisher zwar auf einige Beiträge gestoßen, aber leider noch zu keiner Lösung gekommem.

Problem:

PHP-Code:
_level0.test.onPress = function() {
        if (
ac == true){
        
acfalse;
        
outCR();

Ich möchte gerne, dass ein Button ein Event auslöst, aber dann solange nicht ausführbar ist bis die Methode outCR() vollstndig durchlaufen ist.
In der Methode wird eine Variable (Zähler) hochgezählt und NetStream.seek() aufgerufen. Bei schnellen Klicks hintereinander auf den Button wird zwar der Zähler hochgezählt aber die NetStream.seek()-Methode nur einmal ausgeführt, da diese während den Klicks noch das entsprechende Frame sucht und dabei nicht aktualisiert wird.
Ich habe bisher ein einfache Abfrage mit einem ac:Boolean versucht. Dieser
wird direkt nach dem Klick auf den Button false gesetzt und erst am Ende der ausgeführten Methode outCR() wieder auf true gesetzt.
Dies funktioniert leider nicht, da der Eventhandler ja paralell arbeitet und nicht sequentiell, soweit ich informiert bin.

Kennt Jemand eine Lösung für dieses "gängige" Problem?

Vielen Dank schon mal im vorraus
Mic_K ist offline   Mit Zitat antworten
Alt 16-07-2009, 12:18   #2 (permalink)
brand new user
 
Benutzerbild von RustyCake
 
Registriert seit: May 2002
Ort: Laimbach 6 1/2
Beiträge: 16.884
Kanst Du die Funktion "outCR(); " mal uppen.
__________________
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muß erst gehen lernen"
RustyCake ist offline   Mit Zitat antworten
Alt 16-07-2009, 13:38   #3 (permalink)
Neuer User
 
Registriert seit: May 2009
Beiträge: 27
Hier werden Zähler hochgezählt und entsprechende Abfragen ausgeführt + das enscheidene, Netstream.seek() aufgerufen.

PHP-Code:

function outCR() {
    if (
cr >= 1) {
        if (
cr == 2){
            
_level0.c_pl._y += 150;
        }
        
td =(netStream.time scpta[acp]);
        
acp -= 1;
        
cr -= 1;
        
ti scpta[acp] + td;
        if (
cr == 0){
            
_level0.c_mi._y += -150;
        }
        
netStream.seek(ti);
    }


wichtig ist, das dei seek sobal sie fertig ist..

PHP-Code:
if (infoObject.code == "NetStream.Seek.Notify") {
        
ac true
    } 
den boolean wieder auf true setzt!

Gruß

Geändert von Mic_K (16-07-2009 um 13:40 Uhr)
Mic_K ist offline   Mit Zitat antworten
Alt 16-07-2009, 14:29   #4 (permalink)
Neuer User
 
Registriert seit: May 2009
Beiträge: 27
Das Einzige was ich versuche , ist ja das man auf einen MC klickt und man nicht direkt wieder drauf klicken kann, sondern erst wieder nachdem die durch den Klick aufgerufene Methode vollständig abgearbeitet ist.

Bitte um Hilfe
Mic_K ist offline   Mit Zitat antworten
Alt 16-07-2009, 15:34   #5 (permalink)
brand new user
 
Benutzerbild von RustyCake
 
Registriert seit: May 2002
Ort: Laimbach 6 1/2
Beiträge: 16.884
Und ac ist ordentlich deklariert.
Kannst Du in diesem
PHP-Code:
if (infoObject.code == "NetStream.Seek.Notify") {
       
trace(ac)
    } 
mal machen.
__________________
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muß erst gehen lernen"
RustyCake ist offline   Mit Zitat antworten
Alt 16-07-2009, 16:23   #6 (permalink)
Neuer User
 
Registriert seit: May 2009
Beiträge: 27
Das Abfragen von seek.Notify funktioniert tadelos
und auch das setzten von ac:Boolean ist richtig. Hab schon mit traces gearbeitet.

Das Problem ist glaube ich die interne Abarbeitung.

PHP-Code:
var ac:Boolean true;

_level0.c_mi.onPress = function() {
      if (
ac == true){
            
ac false;
                if(
ac == false){
            
outCR();
                }
}


function 
outCR() {
    if (
cr >= 1) {
        if (
cr == 2){
            
_level0.c_pl._y += 150;
        }
        
td =(netStream.time scpta[acp]);
        
acp -= 1;
        
cr -= 1;
        
ti scpta[acp] + td;
        if (
cr == 0){
            
_level0.c_mi._y += -150;
        }
        
netStream.seek(ti);
    }
}

Der Boolean wird anscheinend gestzt Aber wenn ich schnell klicke wird seek nur einmal ausgeführt, da es ca 2 sec braucht, der Zähler cr, acp aber zweimal!

Woran kann das lkeiuegn, oder eher gesagt kann man onPress irgendwie so gestalten, ohne _visible auf false zu setzen oder den button kurzzeitig zu verscheiben, das es inaktiv wird? bis ein bestimmter wert gesetzt wird ?

Geändert von Mic_K (16-07-2009 um 17:02 Uhr)
Mic_K ist offline   Mit Zitat antworten
Alt 16-07-2009, 17:23   #7 (permalink)
Neuer User
 
Registriert seit: May 2009
Beiträge: 27
Habs grad mal mit b_visible = false ausprobiert. Der Ablauf vom Programm klappt Aber auch hier ist ein Mehrfachklick möglich , da er während er das Bild lädt, anscheinend die seek()-Methode nicht ausführt. Und somit nur die Zähler hochzählt!
Die Abfrage von Seek.Notify ist also bedeutungslos. Lieider sendet Falsh keinen anderen Stauscode.

Letzte Idee meinerseits wäre, bei Onpress den einen Boolean für ca 1sec auf fasle zu setzen.

Wie könnte man das umsetzen?
Mic_K ist offline   Mit Zitat antworten
Alt 16-07-2009, 17:30   #8 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.888
Kannste nicht einfach den Button kurzzeitig inaktiv machen?
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 16-07-2009, 17:39   #9 (permalink)
Neuer User
 
Registriert seit: May 2009
Beiträge: 27
Hi, danke für deine Antwort/Frage

genau das versuche ich ja, der button ist ja nun inaktiv, zumindest wird die Methode die der Klick verursacht nicht ausgeführt.
Wie kann ich den Button denn anders inaktiv machen, sodass er keine Ereignisse mehr auslöst?

Leider gibt es keinen Anhaltspunkt wie lange der Button genau inaktiv bleiben muss, Flash gibt keien Meldung wann die seek-Methode wieder zur Verfügung steht... kann das nur zeitlich angeben.. und das ist 1 sec...

Wie kann ich einen Button für eine sec inaktiv machen?
gibts da ne entsprechende Funktion für?

Geändert von Mic_K (16-07-2009 um 17:49 Uhr)
Mic_K ist offline   Mit Zitat antworten
Alt 16-07-2009, 17:50   #10 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.888
Eben haste noch geschrieben, dass dir setInterval zu umständlich ist (ich sehe alles )!? Wieso eigentlich?
PHP-Code:
_level0.c_mi.onPress = function() {
    if (
ac == true) {
        
ac false;
        if (
ac == false) {
            
outCR();
        }
    }
this.enabled false;
var 
iv setInterval(function(){
_level0.c_mi.enabled true
clearInterval
(iv)},1000);
}; 
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 16-07-2009, 18:07   #11 (permalink)
Neuer User
 
Registriert seit: May 2009
Beiträge: 27
hey danke nochmal,

ja das stimmt
hatte enable auf der help.adobe falsch nachgelesen. Die onaction-Ereignisse werden dann ja deaktiviert. War nur kurz rübergefolgen und hatte gelsen, das Ereigniss MouseUp etc weiterhin aktiv beleiben und dann direkt weiter gesucht, da ich dachte das ist wohl nicht das Richtige!

So funktioniert es galube ich wohl, werde es nachher mal in Ruhe testen

Diese seek()-Methode bei Videos treibt einen aber echt in den Wahnsinn , da muss man ständig tricksen. Anscheinedn kalppt ein schneller Aufruf dieser Methode hintereinander nicht, auch wenn man sie erst wieder aufruft, sobal sie selbst seek.Notify gesendet hat. Trotzdem wird sie nicht ausgeführt...sehr komisch. ODer der Zeitstempel netStream.time ist undefined, trotz seek.Notify ?!

Geändert von Mic_K (16-07-2009 um 18:09 Uhr)
Mic_K ist offline   Mit Zitat antworten
Alt 16-07-2009, 19:15   #12 (permalink)
back to _root
 
Benutzerbild von neo_505
 
Registriert seit: Feb 2004
Beiträge: 330
könntest statt dem Interval auch nen Timeout nehmen...

Und ja ich würde das ansonsten auch so wie Der Frager.
Allerdings: Ja , es würde mich auch wurmen bis ich nicht DIR Lösung gefunden hätte und die ganze sache durchschaut ^^

Gruss,
__________________
Wird alles wahrgenommen, registriert und auf dem riesigen WTF?!-Haufen abgelegt.
Warnung! Falscher oder fehlender Kaffee! Benutzer angehalten.
lab5.ch - Webdesign Basel
“My software never has bugs. But sometimes develops random features ...”
All that we see or seem, Is but a dream within a dream
neo_505 ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
event, eventlistener, events, onpress, seek

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 04:00 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele