Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 15-11-2005, 15:45   #1 (permalink)
Neuer User
 
Registriert seit: Nov 2005
Beiträge: 154
newbie probs mit setIntervall

Hi Leute,
bin neu hier im Forum und auch mit flash.
...seit 2 Wochen fleißig am Tutorials reinziehen.

Hab folgendes Prob. Will nen Fahrstuhl mit AS basteln.
Und habe in Tuts das mit dem Intervall gelernt.
Demnach auch direkt angewendet.
Allerdings ist die Darstellung (AS-generierte Animation) bei jedem Durchlauf unterschiedlich. Das war nicht meine Erwartung davon:

http://www.ankesundermeier.de/flashtest/forum.html

Code:
this.attachMovie("spalt", "spaltm", 1);
this.attachMovie("elevator_rechts_hinten", "ele_rh", 2);
this.attachMovie("elevator_rechts_hinten", "ele_lh", 3);
this.attachMovie("elevator_rechts_vorne", "ele_lv", 4);
this.attachMovie("elevator_rechts_vorne", "ele_rv", 5);
this.attachMovie("rahmen", "raam", 6);

raam._height = 450
raam._x = 350
raam._y = 226
ele_lv._rotation = 180
ele_lh._width = 0
ele_lv._width = 0
ele_rh._width = 0
ele_rv._width = 0
ele_lv._x= 200
ele_lv._y= 451
ele_lh._rotation = ele_lv._rotation
ele_lh._x= 200
ele_lh._y= ele_lv._y
ele_rh._x= 693
ele_rv._x= ele_rh._x
spaltm._x= 450

var nIntervallH:Number = setInterval(bewHinten,10);
var nIntervallV:Number = setInterval(bewVorne,-15);

function bewVorne():Void {
	if (ele_lv._x > spaltm._x - 13) {
		return
	}
	ele_rv._x = ele_rv._x -2;
	ele_rv._width++;
	ele_lv._x = ele_lv._x + 2;
	ele_lv._width++;
	updateAfterEvent();
}

function bewHinten():Void {
	if (ele_rv._x < spaltm._x + 13) {
		return
	}
	ele_rh._x--;
	ele_rh._width++;
	ele_lh._width++;
	ele_lh._x++;
	updateAfterEvent();
	
}

Bin schon ein wenig stolz auf das, was ich da hingebogen habe. Wie gesagt, fange gerade erst an mit flash.

Leider läuft es halt nicht gleichmäßig. Unterschiedlich schnell, weit (bis stop) und ruckelig.

Gibt es eine elegantere Lösung in AS ?


Danke im vorraus,
Fab4ce
Fab4ce ist offline   Mit Zitat antworten
Alt 15-11-2005, 17:41   #2 (permalink)
Neuer User
 
Registriert seit: Nov 2005
Beiträge: 154
Nachtrag

Falls ihr nicht sehen könnt was mein Prob ist, hier nochmal eine genauere Beschreibung:

1. Klammer ich eine Zeile mit setIntervall aus, läuft es viel besser (schneller)
2. lass ich die zwei Zeilen mit ._rotation weg, läuft es auch etwas besser (schneller)
3. lade ich allerdings nen Hintergrund rein, wird es arschlahm.

Mein Prob ist einfach, dass ich es nicht vernünftig kontrollieren kann.
Das muss doch anders möglich sein, oder ?

Fab4ce
Fab4ce ist offline   Mit Zitat antworten
Alt 15-11-2005, 19:13   #3 (permalink)
AAI
 
Benutzerbild von AAI
 
Registriert seit: May 2004
Beiträge: 327
meine Kenntnisse beschränken sich auf
AS1...

allgemein: Flash hat keine stabile Laufzeit.
Mit setInterval wird es noch ein wenig
'schwammiger - ok ich übertreib ein wenig.
Auch wenn man das Interval in Millisekunden
angibt, treten dennoch Abweichungen, je
nach Inhalt der Funktion, um die 3ms auf.

zu deinem script:
1. negativer Wert bei Zeit im Interval?
2. Warum zwei intervalle laufen lassen, wenns
mit einem geht?
3. return: was soll denn da zurückgegeben werden?
4. updateAfterEvent() was soll denn das?

...das waren so die Dinge, die mir ein wenig
komisch vorkamen.
AAI ist offline   Mit Zitat antworten
Alt 15-11-2005, 19:49   #4 (permalink)
Neuer User
 
Registriert seit: Nov 2005
Beiträge: 154
re:

Hi AAI,

erstmal vielen Dank für deine Antwort. Immer beruhigend, wenn jemand antwortet.

zu1: ja ich weiß,.....entstand beim rumprobieren, bei der erwähnten verlorenen Kontrolle.
zu2: hast Recht, hab´s schon geändert. Danke für Hinweis.
zu3: wüßte gerne, wie es richtig geht. Wollte die funktion (den loop) nur irgendwie beenden. Wie macht man es denn vernünftig ?
zu4: das macht es flüssiger. Hab ich nem Tutorial entnommen, und es funzt.

Grüße,
Fab4ce
Fab4ce ist offline   Mit Zitat antworten
Alt 15-11-2005, 19:56   #5 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Ein Interval beendet man mit clearInterval, einfach mal in der Flashhilfe nachschauen oder die Suche nutzen.
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 15-11-2005, 20:14   #6 (permalink)
.
 
Registriert seit: May 2003
Ort: bayern
Beiträge: 1.117
var nIntervallH:Number = setInterval(bewHinten,10);
var nIntervallV:Number = setInterval(bewVorne,-15);

der zweite paramater steht für die zeit im millisekunden in der die funktion aufgerufen wird, was passiert denn da wenn du -15 eingibst?

auch zehn scheint mir sehr niedrig, das besagt jede sekunde wird die funktion bewHinten 100 x aufgerufen.
__________________
[mooseMash]
mooseMash ist offline   Mit Zitat antworten
Alt 15-11-2005, 20:36   #7 (permalink)
AAI
 
Benutzerbild von AAI
 
Registriert seit: May 2004
Beiträge: 327
Beispiel

Hab auch mal n bissl rumprobiert...

Code:
int1 = setInterval(pause,1000)

function close_door () {
	
	ele.door_vl._x+=0.6
	ele.door_vr._x-=0.6
	
	ele.door_hl._x+=0.3
	ele.door_hr._x-=0.3
	i--
	if(i<0) {
		clearInterval(int1)
		open = 0
		int1 = setInterval(pause,1000)
		}
	}

function open_door () {
	
	ele.door_vl._x-=0.6
	ele.door_vr._x+=0.6
	
	ele.door_hl._x-=0.3
	ele.door_hr._x+=0.3
	i--
	if(i<0) {
		clearInterval(int1)
		open = 1
		int1 = setInterval(pause,1000)
		}
	}

function pause () {
	clearInterval(int1)
	i=110
	if(open == 0) {
		int1 = setInterval(open_door,31)
		}else{
			int1 = setInterval(close_door,8)
			}
	
	}
Das ist nicht sauber, aber flüssig
läufts erst mal. Nicht vergessen:
Framerate auf 120 setzen

noch was: so wenig Fläche wie
möglich/soviel wie nötig bewegen.
Angehängte Dateien
Dateityp: zip ele.zip (3,5 KB, 7x aufgerufen)

Geändert von AAI (15-11-2005 um 20:39 Uhr)
AAI ist offline   Mit Zitat antworten
Alt 15-11-2005, 20:57   #8 (permalink)
Neuer User
 
Registriert seit: Nov 2005
Beiträge: 154
mooseMash:

negative Werte scheinen auch zu funktionieren. Die niedrigen Werte sind mir auch suspekt. Aber ich wollte es halt schneller machen, deswegen hab ich rumprobiert. Irgendwas stimmt da noch nicht, meiner Meinung nach.
Aber mit nur noch einem Intervallaufruf läuft es jetzt schon mal deutlich besser.

rendner[i]:

danke. Habs eingebaut. Allerdings will ich das jetzt per Knopf starten.
Den setInterval in eine inline-function per onRelease-Aufruf zu packen, klappt verständlicherweise nicht. Wie macht man das ?

AAI:

Danke, werde es mir gleich mal reinziehen. Muss eben was kochen. Hut ab für dein Engagement.
Bis später.

Fab4ce
Fab4ce ist offline   Mit Zitat antworten
Alt 15-11-2005, 21:52   #9 (permalink)
AAI
 
Benutzerbild von AAI
 
Registriert seit: May 2004
Beiträge: 327
negative Werte

negative Werte bei der Zeitangabe
bei setInterval sind Unsinn!

Der negative Wert wird von Flash
so nicht angenommen und es macht
wohl den kleinstmöglichen positiven
Wert daraus (1?).

Dadurch, dass du updateAfterEvent();
in die function einbaust, wird das
Interval mit der eingestellten Framerate
syncronisiert!

Was passiert, wenn du -15 eingibst?
Also ich glaube, der Wert wird intern
auf 1 gesetzt - updateAfterEvent();
setzt diesen Wert wiederum sync zu
Framerate (beispielsweise: 24) - das
entspricht dann ungefähr:
setInterval(function,42)
1000/24 ---> ca.42

updateAfterEvent(); beenflusst die
Geschwindigkeit der Animation.

Geändert von AAI (16-11-2005 um 13:24 Uhr)
AAI ist offline   Mit Zitat antworten
Alt 16-11-2005, 08:32   #10 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
updateAfterEvent ist doch meines wissens gar nicht synchron mit der Framerate, sonst wär es auch überflüssig.

So könnte man zB ein Intervall per Button starten...
PHP-Code:
function a()
{
   
trace"hallo" );
}

myButt.onRelease = function()
{
   
clearIntervalthis.id );
   
this.id setInterval450 );

__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 16-11-2005, 13:23   #11 (permalink)
AAI
 
Benutzerbild von AAI
 
Registriert seit: May 2004
Beiträge: 327
Zitat:
Zitat von rendner[i]
updateAfterEvent ist doch meines wissens gar nicht synchron mit der Framerate, sonst wär es auch überflüssig.
habe diesen Befehl das erste mal
gestern bewusst wahrgenommen.
Mein Eindruck ist es, dass die function,
die diesen Befehl enthält, und im
Interval ausgeführt wird, dann am
'Framerate-Raster' ausgerichtet wird,
also dann ausgefürt wird, wenn ein
ganzes Frame erreicht ist.

setInterval(xxx,8) + updateAfterEvent()
ist demnach nur dann sinnvoll, wenn die
Framerate bei ca.120 liegt.
1000/120 = 8.333ms ---> Framrate-Raster.
Es entsteht ein: setInterval(xxx,8.333)

setInterval(xxx,8) + updateAfterEvent()
bei einer Framerate von 24 entspricht
setInterval(xxx,41.666).
Bei diesem Beispiel müssten sich erhebliche
Geschwindigkeitsunterschiede feststellen
lassen, je nachdem ob man mit oder ohne
updateAfterEvent() arbeitet.
AAI ist offline   Mit Zitat antworten
Alt 16-11-2005, 19:15   #12 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Hier mal ein Beispiel wo man das sehen kann.
Erstelle mal eine neue Datei und stelle mal die Framerate auf 5 BpS.
Dann einfach den Script ins erste Frame und los gehts, um den unterschied zu sehen einfach mal des "updateAfterEvent" auskommentieren.
PHP-Code:
this.createEmptyMovieClip"m" );
m.beginFill0x000000 100 );
m.lineTo10 ,  );
m.lineTo10 10 );
m.lineTo(  10 );
m.lineTo(  ,  );
m.endFill();

Mouse.hide();

setInterval( function()
{
    
m._x _root._xmouse;
      
m._y _root._ymouse;
      
updateAfterEvent();
} , 
12 ); 
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 17-11-2005, 12:47   #13 (permalink)
AAI
 
Benutzerbild von AAI
 
Registriert seit: May 2004
Beiträge: 327
Einsicht

rendner[i], du hast recht. Mein letzter
Beitrag zeugt von meinem mangeldem
Verständniss - alles Unsinn.

Noch n bissl probiert...
updateAfterEvent() setzt sich über die
voreingestellte Framerate hinweg. Sehr
interessant! - ja, ich muss zugeben: ich
bin sehr angetan von dieser Funktion
AAI 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 01:55 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele