Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 04-05-2009, 08:40   #1 (permalink)
Neuer User
 
Registriert seit: Apr 2009
Beiträge: 22
Smile Funktion nur ein einziges Mal ausführen

Hallo alle miteinander!

Ich habe auf dem ersten Frame meine gesamten Funktionen definiert. Springe ich mit Hilfe eines Buttons auf ein anderes Frame und komme dann erneut per Navigation auf mein erstes Frame zurück werden ja auch meine dortigen Funktionen erneut aufgerufen, wie z.B. Buttons werden erneut instanziiert.

Wie kann ich das verhindern? Also wie schaffe ich es, daß eine Funktion nur ein einziges Mal ausgeführt wird?

Mein Beispiel-Script findet ihr unten. Ich habe ohne Erfolg versucht mit einer if-Anweisung das erneute ausfürhen der Funktion zu verhindern...

Vielen Dank!!!






meineButtonFunktion_();

function meineButtonFunktion_() {

var i:int;
i = 0;

if (i != 1) {

var meinButton_btn = new button_btn();
meinButton_btn.name = "meinButton_btn";

meinButton_btn.x = 100;
meinButton_btn.y = 100;
addChild(meinButton_btn);
i = 1;
}
}
flashslacks ist offline   Mit Zitat antworten
Alt 04-05-2009, 08:44   #2 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Zitat:
Wie kann ich das verhindern?
Spring zu Frame 2 statt zu 1...

Oder aber leg dir eine Zeitleistenvariable an, die bspw. true wird, nachdem die Funktionen durchlaufen wurden. Frag mit einer if-Schleife ab, ob die Variable true oder false ist.
PHP-Code:
if(! _root.frame1gesehenmeineButtonFunktion_();

function 
meineButtonFunktion_() {
   
_root.frame1gesehen true
  Mit Zitat antworten
Alt 04-05-2009, 09:24   #3 (permalink)
Neuer User
 
Registriert seit: Dec 2001
Beiträge: 168
Event.ADDED_TO_STAGE

Eine mögliche Alternative zur lokalen Variablen wäre u.U. der Einsatz des ADDED_TO_STAGE-Events.

Rufe alle Funktionen auf dem ersten Frame aus einer einzigen Funktion heraus auf und führe diese 1 Funktion nur dann aus, wenn das Objekt auf der Bühne platziert wird.

<!-- Nicht getestet -->
PHP-Code:
// Führt die Funktion initialize() aus, sobald das Objekt auf der Bühne platziert ist
addEventListener(Event.ADDED_TO_STAGEinitialize);

// Die Funktion, aus welcher heraus alle weiteren einmal aufgerufen werden
function initialize(e:Event) :void {
    
functionOne();
    
functionTwo();
    
// etc.


Geändert von simmerl (04-05-2009 um 09:27 Uhr)
simmerl ist offline   Mit Zitat antworten
Alt 04-05-2009, 10:03   #4 (permalink)
dr monk
Gast
 
Beiträge: n/a
Ich bin zwar ein Newbie was das betrifft und es ist vielleicht nicht ratsam aber es geht bei mir zumindest, wenn ich die erste Funktion so
PHP-Code:
if (schonmalGelaufen == undefined){
...
schonmalGelaufen 1;

abfrage.

Da der Wert "schonmalGelaufen" erst innerhalb der Funktion definiert wird sollte es funktionieren?!
  Mit Zitat antworten
Alt 04-05-2009, 11:11   #5 (permalink)
Neuer User
 
Registriert seit: Apr 2009
Beiträge: 22
Vielen Dank für Eure schnellen und hilfreichen Beiträge!


Leider hat bei mir noch keiner der Tipps funktioniert. Hier einige Informationen mehr:


Ich habe jetzt unter Frame 1 alle meine Funktionen. Auf diesem ersten Frame werden allerdings noch keine Funktion aufgerufen. Ist sozusagen nur zum beherbergen der Funktionen. Ich wollte dann auf den anderen Frames nur noch Funktionsaufrufe legen.


Auf Frame 2 rufe ich dann die ersten Funktionen auf. Der Frame 2 beinhaltet mein Hauptmenü. Deshalb springt man zwangsläufig öfter auf frame 2 zurück, da man sich von dort aus in andere Untermenüs klickt.


Ich poste gleich noch ein weiteres Beispiel aus meiner Datei. Es handelt sich dabei um einen "Beenden-Button". Nach diesem Muster wollte ich meine Datei aufbauen.


Der Button wird wie erwähnt bei jedem erneuten Besuchs des Frame 2 neu instanziiert.


Eine Lösung habe ich gefunden. Ich definiere für jeden Button eine "Löschen-Funktion", die dann beim betätigen des Buttons aufgerufen wird, der den Benutzer zum Hauptmenü (Frame 2) bringt.


Ich habe keine Ahnung ob das sinnvoll ist.


Bitte postet Eure Lösungsansätze bzw. ich würde mich auch riesig über Anmerkungen/Kritik über meine Variante freuen.


Am einfachsten schein mir die Lösung con agedoubleju zu sein, also die Schleife mit einer Variablen so zu steuern, dass sie nur einmal ausgeführt wird. Hat bei mir leider nicht funktioniert. Vielleicht bin ich auch nur zu blöd!


Gruß

Code:
Auf Frame 1:

function beendenButton_() {
			
		var meinBeenden_btn = new beenden_btn();
		meinBeenden_btn.name = "meinBeenden_btn";
	
		meinBeenden_btn.x = 32;
		meinBeenden_btn.y = 16;
		
		meinBeenden_btn.addEventListener(MouseEvent.MOUSE_UP,
		
				function (evt:MouseEvent):void {
						fscommand("quit");
					});
		
		addChild(meinBeenden_btn);
	} 



function beendenButtonLoeschen_() {
		removeChild(getChildByName("meinBeenden_btn"));
	}


function startseiteButton_() {
	
		var meinStartseite_btn = new startseite_btn();
		meinStartseite_btn.name = "meinStartseite_btn";
		
		meinStartseite_btn.x = 500;
		meinStartseite_btn.y = 500;
		
		meinStartseite_btn.addEventListener(MouseEvent.MOUSE_UP,
		
				function zurStartseite_(evt:MouseEvent):void {
						gotoAndStop("startseite");
						beendenButtonLoeschen_();
						
					});
					
		addChild(meinStartseite_btn);
	}



Auf Frame 2:

beendenButton_();
startseiteButton_()
flashslacks ist offline   Mit Zitat antworten
Alt 04-05-2009, 12:49   #6 (permalink)
Neuer User
 
Registriert seit: Dec 2001
Beiträge: 168
if-Anweisung und Aufruf

Die if-Anweisung (nicht „Schleife“) sollte das Problem dann eigentlich zuverlässig lösen, wenn du im 1. Frame zu deinen Funktionen noch die angesprochene lokale Variable anlegst, welche dann in der Funktion startseiteButton_() einmalig von ihrem initialien false auf true gesetzt wird. Also

1. Frame
PHP-Code:
var buttonSet:Boolean false;
function 
startseiteButton_() :void {
    if(
buttonSet// Wenn der Button bereits gesetzt wurde, wird nichts weiter ausgeführt
        
return;
    
buttonSet true// Einmal gesetzt, wird diese Funktion nicht erneut ausgeführt
    // Anschließend den Button erstellen und auf der Bühne platzieren
}
// Alle übrigen Funktionen 

Alternative
Eine schönere Alternative wäre sicherlich, statt der lokalen boolschen Variablen direkt auf das Vorhandensein des Buttons zu prüfen. Also bspw.

PHP-Code:
var startseiteButton:MovieClip;
function 
startseiteButton_() :void {
    if(
startseiteButton != null// Wenn der Button bereits gesetzt wurde, wird nichts weiter ausgeführt
        
return;
    
startseiteButton = new ...()
}
// Alle übrigen Funktionen 

Geändert von simmerl (04-05-2009 um 12:53 Uhr)
simmerl ist offline   Mit Zitat antworten
Alt 05-05-2009, 13:14   #7 (permalink)
Neuer User
 
Registriert seit: Apr 2009
Beiträge: 22
Vielen Dank für die verständlich dokumentierte Hilfe!

Die beiden Varianten haben mir sehr gut geholfen. Vor allem die "Alternative"!!!

Ich bin noch ein wenig am umstrukturieren, aber das sollte alles gelingen.

Gruß

flashslacks
flashslacks ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
aufrufen, ausführen, funktion, schleife, verhindern

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 13:11 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele