problem mit zeitilch versetzter skriptausführungs

mama-karl

Mitglied
servus,

ich habe mal wieder ein problem: überraschung :)
folgendes:

ich habe 2 mcs eines isn menue, das andere die eigentlich anwendung. klicke ich aufn button soll eine externe swf (mc2, soll heissen meneu1.swf im anhang) reingeladen werden (level30), was ja auch klappt. allerdings klappt die darauffolgende anweisung nicht den clip an die richtigen coordinaten zu setzen.
... loadMovieNum("menue1.swf", 30);
_level30._x = 126;
_level30._y = 30; ....

das klappt einerseits nicht.
andererseits klappt es auch nicht, was ich mir zur zeitversetzen aktion des reinladens gedacht habe:
der folgende code liegt auf einem button und soll die zweite swf im anhang reinladen:

on (press) {
startTime = getTimer();
delay = 400;
watch = new Date();
firster = watch.getMilliseconds;
breakeven = firster + delay;

for (now=getTimer(); now<breakeven;) {
loadMovieNum("menue1.swf", 30);
_level30._x = 126;
}

}


ach ja, ich benutz flash 2004 und das zeitversetze ist notwendig, um eine bewegung, die zwischenzeitlich passiert zuende bewegen zu lassen.



weiss da jemand was schlaues?
 

Anhänge

yep,

vielen besten dank nochmal!
die sache mit dem skalieren habe ich einfach über das direkte ansprechen des filmes erledigt. ich dachte irgendwie, dass das ansprechen über die objektbezeichnung zu den target-methoden gehören würde–falsch gedacht.

dein ezitverzögerungsvorschlag probier ich sogleich aus…

greets
karl
 
1. Groß und kleinschreibung beachten. Siehe http://www.tutorials.de/netiquette.html

2. Zu "das klappt einerseits nicht."
Stufen kann man verschieben und skalieren. Allerdings:
In dem moment indem "menue1.swf" in Level 30 geladen wird, wird level30 überschrieben,
und insofern auch alles was mit Level 30 zusammenhängt,
wie beispielsweise eine x- & y-Verschiebung.
Das könnte man so lösen:
PHP:
function observeLoad ()
{
	clearInterval ( OBSL )
	_level30._visible = false
	var t = _level30.getBytesTotal()
	var l = _level30.getBytesLoaded()
	if ( t > 100 && l == t )
	{
		_level30._visible = true
		_level30._x = 126
		_level30._y = 30
	}
	else
	{
		OBSL = setInterval ( this, "observeLoad", 100 )
	}	
}
loadMovieNum("menue1.swf", 30);
OBSL = setInterval ( this, "observeLoad", 100 )

3. Zu for (now=getTimer(); now<breakeven...
for-Schleifen werden zeitlich gesehen sofort und nur einmal abgearbeitet.
Das müsste man mit einem onEnterFrame, bzw setInterval lösen.
Und vom Sinn her versteh ich das nicht,
solange now kleiner als breakeven ist soll er was machen?
Also die ersten 400 Millisekunden soll er jede Millisekunde "menue1.swf" laden?
Da stimmt doch was nicht.
Ich rate mal einfach ins blaue was du meinen könntest,
bin mir aber mittlerweile mehr als unsicher dein Problem verstanden zu haben...
PHP:
startTime = getTimer();
delay = 400;
watch = new Date();
firster = watch.getMilliseconds;
breakeven = firster + delay;
mussnoch = true

function checkIt ()
{
	clearInterval ( CHECKI )
	if ( getTimer() > breakeven && mussnoch )
	{
		mussnoch = false
		loadMovieNum("menue1.swf", 30);
		OBSL = setInterval ( this, "observeLoad", 100 )
	} 
	else 
	{
		CHECKI = setInterval ( this, "checkIt", 100 )
	}
}
 
das skript sieht momentan so aus:
PHP:
on(release){
	_root.spacer_x = 126;
	//	_level30._visible = true;
	ar iv = setInterval(function() { sleeper(); }, 1000); 

	function sleeper() { 
	clearInterval(iv); 
		loadMovieNum("menue1.swf", 30);
			menue1._x = 126;	
		}
}

mir sagt der debugger dann:
**Fehler** Szene=Scene 1, Ebene=Layer 1, Bild=1:Zeile 4: Syntaxfehler.
ar iv = setInterval(function() { sleeper(); }, 1000);

**Fehler** Szene=Scene 1, Ebene=Layer 1, Bild=1:Zeile 7: Syntaxfehler.
clearInterval(iv);

**Fehler** Szene=Scene 1, Ebene=Layer 1, Bild=1:Zeile 11: Unerwartetes Auftreten von '}
}

ich find den fehler ja auch deswegen nicht, weil ich das skript noch nicht gänzlich verstehe…
;)
 
servus chris,
… ich mein:

Servus Chris,
;)

Also ich hab kein Handbuch, keine Ressourcen bis auf diese Seite und und das Flashinterne Nachschlagebuch. Ich versteh ja selbst nicht genau, was dort drin steht… das muss ich schon zugeben. Das sieht man anscheinend ja auch.

zu 3.)
Hast schon recht: das soll er nich machen. Er soll 400 Millisekunden warten und dann die 'menue1.swf' laden. Ich hab die 'for'-Anweisung so verstanden…

ich probier mal rum…

also ich will ja nicht rüberkommen, wie der Stümper vorm Herrn, aber mir bleibt ja momentan nur Trial&Error…

Hab Dein Skript ausprobiert

PHP:
on(release){
	_root.spacer_x = 126;

	startTime = getTimer(); 
	delay = 400; 
	watch = new Date(); 
	firster = watch.getMilliseconds; 
	breakeven = firster + delay; 
	mussnoch = true 

	function checkIt(){ 
	clearInterval ( CHECKI ) 
	if ( getTimer() > breakeven && mussnoch ) { 
mussnoch = false 
loadMovieNum("menue1.swf", 30); 
OBSL = setInterval ( this, "observeLoad", 100 ) 
		} 
 	else { 
CHECKI = setInterval ( this, "checkIt", 100 ) 
		} 
	}
}

und er sagt mir:


**Fehler** Szene=Scene 1, Ebene=Layer 1, Bild=1:Zeile 12: Syntaxfehler.
clearInterval ( CHECKI )

**Fehler** Szene=Scene 1, Ebene=Layer 1, Bild=1:Zeile 13: Syntaxfehler.
if ( getTimer() > breakeven && mussnoch ) {

**Fehler** Szene=Scene 1, Ebene=Layer 1, Bild=1:Zeile 14: Syntaxfehler.
mussnoch = false

Anzahl der ActionScript-Fehler: 3 Gemeldete Fehler: 3

Könntest Du mir vielleicht erklären warum er das nicht annimmt?
hab ich schon erwähnt, dass ich flash 2004 pro benutz?

Hab ich schon erwähnt, dass die Anweisungen auf einem Button liegen?
 
Zuletzt bearbeitet:
Beim Button liegt der Haken.
Pack das in die Zeitleiste in der auch dein Button liegt als Frameaction
PHP:
function observeLoad ()
{
    clearInterval ( OBSL )
    _level30._visible = false
    var t = _level30.getBytesTotal()
    var l = _level30.getBytesLoaded()
    if ( t > 100 && l == t )
    {
        _level30._visible = true
        _level30._x = 126
        _level30._y = 30
    }
    else
    {
        OBSL = setInterval ( this, "observeLoad", 100 )
    }    
}
function init()
{
	_root.spacer_x = 126;
    startTime = getTimer();
    delay = 400;
    watch = new Date();
    firster = watch.getMilliseconds;
    breakeven = firster + delay;
    mussnoch = true
	checkIt()
}

function checkIt()
{
    clearInterval ( CHECKI )
    if ( getTimer() > breakeven && mussnoch ) 
	{
		mussnoch = false
		loadMovieNum("menue1.swf", 30);
		OBSL = setInterval ( this, "observeLoad", 100 )
    }
    else 
	{
		CHECKI = setInterval ( this, "checkIt", 100 )
    }
}
und der Button kriegt dann das:
PHP:
on (release) {
	init()
}
 
Zurück