Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 28-08-2006, 09:43   #1 (permalink)
kenntEinenDerFlashKann
 
Benutzerbild von Aule
 
Registriert seit: Mar 2002
Ort: sauerland
Beiträge: 220
setInterval() - verständnis

moin,

ich will meinen film, der normalerweise in einer Schleife läuft, bei bestimmten benannten Bildern anhalten, das mach ich mit setInterval() auf dem letzten Bild vor dem nächsten benannten Bild:

Code:
stop();
myInterval = setInterval(function () {
	clearInterval(myInterval);
	play();
}, zeit*1000);
zeit = 2 //Zuweisen des Zeitintervalls für den nächsten Stop
Ganz am Anfang wird "zeit" einmal auf 5 eingestellt und bei jedem Aufruf von setInterval() dann jeweils für das nächste Anhalten.

bei bestimmten User-Aktionen will ich direkt an die zugehörige Stelle springen und dort länger verweilen als normalerweise voreingestellt ist. Folgt dann keine weitere Eingabe, soll der Film dann wie gewohnt mit den normalen Verweildauern weiterlaufen.

Also hab ich in die Funktion für den Button reingeschrieben:
Code:
gotoAndPlay("bildname");
zeit = 30;
Der "normale" Durchlauf funktionert wunderbar, aber sobald ich irgendwo hinspringe, ignoriert die setintervall-Funktion sämtliche Zeitangaben und läuft komplett ohne verzögerung weiter...

wo liegt der Fehler?

Aus der Flash-Hilfe werd ich nicht so recht schlau, die Beispiele sind alle so kompliziert und hier im Forum gibt es zu "setIntervall" über 500 Einträge....
__________________
...life is just a workaround...
Aule ist offline   Mit Zitat antworten
Alt 28-08-2006, 09:56   #2 (permalink)
tracer
 
Benutzerbild von andretti
 
Registriert seit: Jun 2004
Beiträge: 4.415
wenn du die variable zeit über verschiedene frames mitnehmen möchtest, muss tu diese global intiieren und global verändern, abfragen normal:

PHP-Code:
_global.zeit 10;
trace(zeit);

var 
testing setInterval(function(){clearInterval(testing);_global.zeit 50;trace(zeit);},2500
__________________
Viola per Sempre
Alle Angaben ohne Gewehr!
trace your open mind in variables !
andretti
ActionScript Dictionary
andretti ist offline   Mit Zitat antworten
Alt 28-08-2006, 10:01   #3 (permalink)
AAI
 
Benutzerbild von AAI
 
Registriert seit: May 2004
Beiträge: 327
Du möchtest einen zeitlich gesteuerten
Ablauf im Prgramm:

Code:
zeit=0
int_ablauf = setInterval(ablauf,1000)

function ablauf () {
   zeit++
   switch (zeit) {
      case 1:
      //mach dies
      break

      case 2:
      //mach das
      break

      case 60:
      //ende
      clearInterval(int_ablauf)
      break
      }
   }
Gruß
aai

edit:
'setInterval' arbeitet etwas ungenau.
Eine Sekunde im Standalone Flash-
player(also beim testen) kann im Browser
mit Plugin schon mal 50% länger dauern.

Geändert von AAI (28-08-2006 um 10:18 Uhr)
AAI ist offline   Mit Zitat antworten
Alt 28-08-2006, 10:27   #4 (permalink)
kenntEinenDerFlashKann
 
Benutzerbild von Aule
 
Registriert seit: Mar 2002
Ort: sauerland
Beiträge: 220
@andretti: da ändert sich bei meinem Problem aber aber nix...

@AAI: wenn ich Dein Script richtig verstehe, wird da jede Sekunde was anderes gemacht -nett, aber nicht das, was ich suche.

Ich brauche eine Steuerung für ne Messe-Präsentation, da wird ein Film mit mehreren Unterpunkten gezeigt, der läuft normalerweise als Schleife durch. Wenn aber ein Messebesucher einen unterpunkt direkt über die Tastatur anwählt (numerisches Tastenfeld), soll der Film dorthin springen und dann da etwas länger verweilen als üblich (z.B. 30 Sek). Folgt innerhalb dieser 30 Sekunden keine weitere Eingabe, läuft der Film dann von dieser Stelle ganz normal weiter...
__________________
...life is just a workaround...
Aule ist offline   Mit Zitat antworten
Alt 28-08-2006, 10:59   #5 (permalink)
tracer
 
Benutzerbild von andretti
 
Registriert seit: Jun 2004
Beiträge: 4.415
evt kannst mal eine .fla, auf das problem reduziert, hochladen; so wird das Problem nur vermutet, des ist müßig;
__________________
Viola per Sempre
Alle Angaben ohne Gewehr!
trace your open mind in variables !
andretti
ActionScript Dictionary
andretti ist offline   Mit Zitat antworten
Alt 28-08-2006, 11:23   #6 (permalink)
kenntEinenDerFlashKann
 
Benutzerbild von Aule
 
Registriert seit: Mar 2002
Ort: sauerland
Beiträge: 220
hier mal die fla

okay, ich hab die Fla mal auf das wesentliche reduziert. hier ist sie.
Angehängte Dateien
Dateityp: zip zeit.zip (4,8 KB, 8x aufgerufen)
__________________
...life is just a workaround...
Aule ist offline   Mit Zitat antworten
Alt 28-08-2006, 12:56   #7 (permalink)
AAI
 
Benutzerbild von AAI
 
Registriert seit: May 2004
Beiträge: 327
hab keine Lust mir die *.fla anzuschaunen.

Weiß aber auch gar nicht, wo es hier
kompliziert wird

Beim Start und bei Tastendruck wird eine
Funktion aufgerufen, die den automatischen
Ablauf auslöst:
Code:
function warte_mal () {
   w_zeit = 30*1000
   clearInterval(int_ablauf) //falls ablauf-Interval läuft
   clearInterval(int_warte) //falls warte-Interval schon läuft
   int_warte = setInterval(warte,w_zeit)
   }

function warte () {
   clearInterval(int_warte)
   int_ablauf = setInterval(ablauf,1000)
   }
Der Ablauf:
Code:
function ablauf () {
   zeit++
   switch (zeit) {
      case 1:
      //mach dies
      break

      case 20:
      //mach das
      break

      case 60:
      //Wiederholung
      zeit = 0
      break
      }
   }
Sollte bei der Eingabe der Menüpunkt
geändert worden sein, muß die Variable
'zeit' daraufhin angepasst werden, um
an der gegebenen Stelle mit dem autom.
Ablauf fortzufahren.

Gruß
aai

Geändert von AAI (28-08-2006 um 13:39 Uhr)
AAI ist offline   Mit Zitat antworten
Alt 28-08-2006, 13:26   #8 (permalink)
kenntEinenDerFlashKann
 
Benutzerbild von Aule
 
Registriert seit: Mar 2002
Ort: sauerland
Beiträge: 220
**Fehler** Szene=Szene 1, Ebene=Ebene 3, Bild=1:Zeile 4: Typdiskrepanz.
clearInterval(warte) //falls warte-Interval schon läuft

**Fehler** Szene=Szene 1, Ebene=Ebene 3, Bild=1:Zeile 9: Typdiskrepanz.
clearInterval(warte)
__________________
...life is just a workaround...
Aule ist offline   Mit Zitat antworten
Alt 28-08-2006, 13:38   #9 (permalink)
AAI
 
Benutzerbild von AAI
 
Registriert seit: May 2004
Beiträge: 327
Sorry, habs nur so geschrieben, nicht
getestet.

es heist natürlich:
Code:
clearInterval(int_warte)
AAI ist offline   Mit Zitat antworten
Alt 28-08-2006, 14:14   #10 (permalink)
kenntEinenDerFlashKann
 
Benutzerbild von Aule
 
Registriert seit: Mar 2002
Ort: sauerland
Beiträge: 220
immer noch nicht...

Habs jetzt so :
Code:
function warte_mal () {
   w_zeit = 30000;
   trace("wartemal");
   clearInterval(int_ablauf); //falls ablauf-Interval läuft
   clearInterval(int_warte); //falls warte-Interval schon läuft
   int_warte = setInterval(warte,w_zeit);
   }

function warte () {
	trace("warte");
   clearInterval(int_warte);
   int_ablauf = setInterval(ablauf,2000);
   }

ablauf = function() { 
	play();
}

warte();

var tastaturlauscher :Object = new Object();
tastaturlauscher.onKeyDown = function() {
	if(Key.isDown(97)) { //beim Drücken der Taste Num.1
		gotoAndPlay("detail_01");
		warte_mal();
	}
	if(Key.isDown(98)) { //beim Drücken der Taste Num.2
		gotoAndPlay("detail_02");
		warte_mal();
	}
	if(Key.isDown(99)) { //beim Drücken der Taste Num.3
		gotoAndPlay("detail_03");
		warte_mal();
	}
	if(Key.isDown(100)) { //beim Drücken der Taste Num.4
		gotoAndPlay("detail_04");
		warte_mal();
	}
}
Key.addListener(tastaturlauscher) // Anmelden des Listeners bei der Key-Klasse
ein Bild vor jedem benannten Bild ("detail_01" usw) steht dann noch:
Code:
stop();
warte();
Solange ich nix drücke, läuft er brav nach den Angaben in der warte()-Funktion immer nach 2 Sek weiter.

Sobald ich aber eine der Tasten 1-4 drücke, läuft der Film einfach OHNE stops durch... Er schert sich quasi gar nicht um die Zeitangaben...

Hab die Fla mit deinem Scripts mal angehängt...
Angehängte Dateien
Dateityp: zip zeit2.zip (5,5 KB, 1x aufgerufen)
__________________
...life is just a workaround...
Aule ist offline   Mit Zitat antworten
Alt 28-08-2006, 14:42   #11 (permalink)
AAI
 
Benutzerbild von AAI
 
Registriert seit: May 2004
Beiträge: 327
gotoAndPlay("detail_01"); ---> gotoAndStop("detail_01"); ?
AAI ist offline   Mit Zitat antworten
Alt 28-08-2006, 15:04   #12 (permalink)
kenntEinenDerFlashKann
 
Benutzerbild von Aule
 
Registriert seit: Mar 2002
Ort: sauerland
Beiträge: 220
Nö, in dem Marker-Bild steht ja kein Code...,

der Stop-Befehl kommt ein Bild vor dem nächsten Marker, gefolgt von dem warte()-Aufruf.

Habs jetzt schon mit setTimeout versucht, aber irgendwie klappt das genauso wenig.
__________________
...life is just a workaround...
Aule ist offline   Mit Zitat antworten
Alt 28-08-2006, 18:09   #13 (permalink)
AAI
 
Benutzerbild von AAI
 
Registriert seit: May 2004
Beiträge: 327
Frame 1.1 - Setup
PHP-Code:
ziel = [0,"pa","pum","pi","patsch"]
w_zeit 5*1000
stop
() 
Frame 1.2 - Code
PHP-Code:
nr 1    // Screen-Nr
key_control ()
show_screen ()
warte_mal ()


function 
key_control () {
    
ziel.length-1
    int_key 
setInterval(listen,31)
    }

function 
listen () {
        
i=1
        one
=0
        
while(i<=n) {
            if(
Key.isDown((96+i)) ) {
                
one++
                if(
one==and nr_old!=i) { //wenn genau eine Taste gedrückt
                    
nr i
                    show_screen 
()
                    }
                }
            
i++
            }
        
nr_old=nr
        
}



function 
show_screen () {
    
gotoandstop(ziel[nr])
    
warte_mal ()
    }


function 
warte_mal () {
    
clearInterval(int_warte)
    
int_warte setInterval(pause_ende,w_zeit)
    }

function 
pause_ende () {
    
clearInterval(int_warte)
    if(
nr<n) {
        
nr++
        }else{
            
nr=1
            
}
    
show_screen ()
    } 
Angehängte Dateien
Dateityp: zip messe.zip (3,4 KB, 6x aufgerufen)
AAI ist offline   Mit Zitat antworten
Alt 28-08-2006, 21:24   #14 (permalink)
kenntEinenDerFlashKann
 
Benutzerbild von Aule
 
Registriert seit: Mar 2002
Ort: sauerland
Beiträge: 220
Thumbs up Whow!

Hammer! Ich versteh zwar momentan nur die Hälfte von dem, was Du da geschrieben hast, aber es funktionert! Muss ich mich jetzt mal in Ruhe reinlesen und das Ding sezieren, damit ich's auch nachvollziehen kann.

Auf jeden Fall hast Du mir sehr geholfen - ich hatte schon daran gedacht, die Systemzeit auszulesen und damit zu rechnen und somit setInterval() zu umgehen. Naja, warum kompliziert, wenns auch elegant geht ;-) Danke nochmal!!!
__________________
...life is just a workaround...
Aule 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 06:45 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele