Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 22-11-2008, 09:57   #1 (permalink)
Neuer User
 
Registriert seit: Jan 2002
Beiträge: 82
onEnterFrame Problem

Hallo an euch lieben hilfsbereiten Leute

Ich hba ein Verständnisproblem glaub ich mit onEnterFrame.
Vielleicht kann mir jemand etwas Licht ins Dunkel bringen.

Ich dachte eigentlich, dass ich die onEnterFrame Funktion brauche, wenn ich will, dass bestimmte Befehle laufend aktualisiert werden.

Bs:
Ich hab ein Skript geschrieben, wo ein Bild (ein sehr langes Bild) durch den Bildschirm läuft (von rechts nach links).
Wenn ein Button gedrückt bleibt, beschleunigt das Bild und hält dann die Geschwindigkeit. Das funktioniert auch.
Da die onPress bedingung die ganze zeit über erfüllt ist, benötige ich keine for schleife sondern nur eine if abfrage.

nun soll bei auslassen der Funktion das Bild abbremsen und danach zum Stehen kommen. Da die onRelease Bedingung ja nur einmal ausgeführt wird, brauch ich da eine for-Anweisung.

Aber das Abbremsen funktioniert nicht. es geht einfach viel zu schnell. die forschleife wird scheinbar fertig gerechnet und erst danach angezeigt.
Somit bremst mein Bild nicht sondern steht prompt und macht noch einen Sprung nach vorne.

Code:
on (press) {
	this.onEnterFrame = function() {
		if (_root.speed < 20){_root.speed++}
		_root.zwiebel._x=_root.zwiebel._x-_root.speed;
	}
}
on (release) {
		
	for(_root.speed = 20; _root.speed >=1 ; _root.speed=_root.speed/1.0075){

		_root.zwiebel._x=_root.zwiebel._x-_root.speed;
			
	}
	_root.speed = 0;
	delete this.onEnterFrame;
}
Im ersten Filmframe ist die speed Variable mit 0 festgelegt.

die Bremse (1,0075) hab ich auf Werte zwischen 2 und 1,0000... geändert ohne einen Unterschied fest zu stellen.
theexplainer ist offline   Mit Zitat antworten
Alt 22-11-2008, 11:16   #2 (permalink)
nobody is perfect
 
Benutzerbild von Decrone
 
Registriert seit: Apr 2002
Ort: Bremen
Beiträge: 3.049
bei deinem Code Beispiel würde das dann so aussehen

PHP-Code:
on (press) {
    
this.onEnterFrame = function() {
        if (
_root.speed 20){_root.speed++}
        
_root.zwiebel._x=_root.zwiebel._x-_root.speed;
    }
}
on (release) {
    
this.onEnterFrame = function() {
        if (
_root.speed 1){
            
_root.speed--;
        }else{
            
delete this.onEnterFrame;
        }
        
_root.zwiebel._x=_root.zwiebel._x-_root.speed;
    }

Gruß Dec
__________________
FF Unterstützen! Erste Hilfe! häufig gestellten Fragen
...................... ............... ................................
Decrone ist offline   Mit Zitat antworten
Alt 22-11-2008, 17:35   #3 (permalink)
Neuer User
 
Registriert seit: Jan 2002
Beiträge: 82
seh ich dass nun richtig, dass die release funktion eigentlich nur einmal aufgerufen werden würde, aber durch die 2. on enter frame wird sie so lange am leben gehalten und laufend erneuert, bis ich die lösche ?
theexplainer ist offline   Mit Zitat antworten
Alt 22-11-2008, 18:07   #4 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
das ereignis (event) onPress passier nur einmal, wenn du den maus-button im button-bereich nieder drückst.
das ereignis onRelease findet nur einmal statt, wenn du den maus-button innerhalb des button-bereiches los lässt.
es gibt da noch das onReleaseOutside

onEnterFrame hingegen wird ständig ausgeführt.
this.onEnterFrame = kann man als variable ansehen, in die man alles mögliche (natürlich zeiger auf funktionen) reinschreiben kann.
wenn da garnichts drin steht, dann passiert halt nichts,
wenn ein zeiger auf eine funktion drin steht, dann wird diese jedesmal ausgeführt.

im beispiel von Decrone
wird mit onPress ein enterframe gestartet, das ein speed erhöht.
mit onRelese wird dieses mit einem anderen enterframe überschrieben, das speed wieder verzögert und sich danach selbst löscht.


ergänze ein paar
trace("hallo");
befehle, dann kannst du sehen, welcher programmteil wann ausgeführt wird.
bzw. mit dem debugger, der hier aber nicht so sinnvoll einzusetzen ist. dennoch probiere auch mal den debugger aus.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (22-11-2008 um 18:13 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 05-03-2009, 10:57   #5 (permalink)
Neuer User
 
Registriert seit: Dec 2003
Ort: Köln
Beiträge: 44
Ich häng mich mal in diesem Thread an.

ich habe eine Zeitschleife in der ich nach bestimmten Zeiten verschiedene Ereignisse abrufe. Am Ende der Zeit soll sich das onEnterFrame Event löschen. Einen Trace Befehl den ich zusammen mit dem delete.onEnterFrame in eine Zeile gepackt habe wird aber nicht aufgeführt. heisst das das mein on EnterFrame Event endlos weiterläuft? Und wie müsste ich es richtig einbauen um es zu löschen.

PHP-Code:
    var zeit:Number=140;
    
this.onEnterFrame = function(){
    if (
zeit>=1) {
        switch(
zeit) {
            case 
120:
            
//jetons reinfahren
            
jetons_mc.gotoAndPlay(2);
            break;
            case 
140:
            
//erklärtext rausfahren
            
karte(erktext2_mc,"_x",360,970,25);
            break;
            case 
100:
            
anikarte_mc.gotoAndPlay(2);
            break;
            case 
70:
            
comhand_mc.gotoAndStop(i);
            break;
            case 
40:
            
//Spielstand wird gezeigt
            
anfahrt compoints[runde] * 5;
            
spielstandcom(anfahrt);
            break;
            default:
            }
        
zeit-=1;
    } else {
        
trace("delete erfolgreich");
            
delete this.onEnterFrame;
        }


Hallospensa ist offline   Mit Zitat antworten
Alt 05-03-2009, 11:15   #6 (permalink)
Neuer User
 
Registriert seit: Dec 2003
Ort: Köln
Beiträge: 44
Ok ich habs rausgefunden. In einer switch-case anweisung habe ich einen anderen Timer this.onEnterFrame gestartet. Deshalb habe ich mir den anderen mit delete this.onEnterframe zerschossen.
Die Lösung war folgende:

Einfach dem onEnterFrame Event einen mc zuweisen das sich die Timer nicht in die Quere kommen.
Hallospensa 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:19 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele