Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 17-02-2004, 13:30   #1 (permalink)
________________
 
Benutzerbild von Katze
 
Registriert seit: May 2002
Ort: Braunschweig
Beiträge: 441
Function mehrmals ausführen

Hi Folks!!!

Nicht schlagen, habe dazu auch gerade zwei Threads gelesen, habe ich aber nicht ganz verstanden.

Ich habe ein ganz simple Funktion _global in der Hauptzeitleiste definiert und kann diese auch perfekt aus jeden reingeladenen swf aufrufen. Nun muß ich sie aber manchmal mehrmals aufrufen. Aber jetzt erstmal kurz die Funktion aus den Hauptzeitleiste:

ActionScript:
  1. _global.getOutline = function (whichOutline)
  2. {
  3.     setOutline = new Color(whichOutline);
  4.     setOutline.setRGB("0x"+outline_Color);
  5. }

Nun rufe ich zum Beispiel aus einem eingeladenen Movie die Funktion so auf:

ActionScript:
  1. getOutline ("portlet03.outline");

klappt auch alles wunderbar, aber nun will ich im selben Movie nochmal die Funktion auf einen anderen Container anwenden und möchte jetzt nicht das hier schreiben:

ActionScript:
  1. getOutline ("portlet03.outline");
  2. getOutline ("portlet03.background");

kann ich nicht einmal die Funktion aufrufen und ihm sagen, dass er es für beide und später noch mehr machen soll?!?

so in der Art:

ActionScript:
  1. getOutline ("portlet03.outline" && "portlet03.hintergrund");

Ich weiß, dass das da oben nicht geht

thx Katze
__________________
Etwas nicht zu können, ist kein Grund es nicht zu tun!

STUDIO B12 Blog

Geändert von Katze (17-02-2004 um 13:32 Uhr)
Katze ist offline   Mit Zitat antworten
Alt 17-02-2004, 13:54   #2 (permalink)
Nett hier ...
 
Benutzerbild von makese
 
Registriert seit: Nov 2002
Ort: Berlin
Beiträge: 643
...

hallo

schau dir mal Function.apply() aus der hilfe an (steig da selber zwar noch net ganz durch) aber glaube ist was für deine zwecke

.... wäre net wenn du dann mal ein beispiel postest ;-)


gruß makese
makese ist offline   Mit Zitat antworten
Alt 17-02-2004, 13:59   #3 (permalink)
Nett hier ...
 
Benutzerbild von makese
 
Registriert seit: Nov 2002
Ort: Berlin
Beiträge: 643
...

hab mal ein beispiel gemacht:
ActionScript:
  1. function theFunction () { // an die die ganzen parameters übergeben werden
  2.     trace ("the funktion"+parameters);
  3. }
  4. function callTheFunction () {
  5.     n = Number (10);
  6.     parameters = [];
  7.     for (i=0; i<n; i++) {
  8.         parameters.push ("parameter"+i);
  9.     }
  10.     theFunction.apply (null, parameters);
  11. }
  12. callTheFunction ();

schon ne ganz nette angelegenheit ... ;-)

gruß makese
makese ist offline   Mit Zitat antworten
Alt 17-02-2004, 14:03   #4 (permalink)
________________
 
Benutzerbild von Katze
 
Registriert seit: May 2002
Ort: Braunschweig
Beiträge: 441
mhhhh meinste wirklich, dass das das (geil dreimal das"s"), was ich suche?!? So wie ich das verstanden habe, muß ich da ja einen Wert mit übergeben oder in den function schon definieren, der besagt, wie oft er sie ausführen soll. Aber das ist nicht das, was ich will...

Ich könnte ja auch dann sonst, in meiner Funktion einen Wert setzen, der mir sagt wie oft er rödeln soll, aber soll es eigentlich Anhand der mitgegebenen Parametern erkennen, wie oft er es machen soll...
__________________
Etwas nicht zu können, ist kein Grund es nicht zu tun!

STUDIO B12 Blog
Katze ist offline   Mit Zitat antworten
Alt 17-02-2004, 14:08   #5 (permalink)
________________
 
Benutzerbild von Katze
 
Registriert seit: May 2002
Ort: Braunschweig
Beiträge: 441
Kannste nochmal posten, wie Du meinst, dann die Parameter übergeben werden sollen. Am besten mit meinem Beispiel obe...
__________________
Etwas nicht zu können, ist kein Grund es nicht zu tun!

STUDIO B12 Blog
Katze ist offline   Mit Zitat antworten
Alt 17-02-2004, 14:11   #6 (permalink)
Nett hier ...
 
Benutzerbild von makese
 
Registriert seit: Nov 2002
Ort: Berlin
Beiträge: 643
...

ActionScript:
  1. noch mal ohne das füttern des arrays mit ner schleife
  2.  
  3. function theFunction () { // an die die ganzen parameters übergeben werden
  4.         trace ("the funktion"+parameters);
  5. }
  6. function callTheFunction () {
  7.  
  8.         parameters = []; // erstellt array
  9.                    parameters.push ("parameter_rot"); // trägt sich ein
  10.   parameters.push ("parameter_hellblau");
  11.   parameters.push ("parameter_gruen");
  12.      
  13.         theFunction.apply (null, parameters); // ta tam nur ein aufruf und alle parameter im array paramters werden AUFEINMAL übergeben
  14. }
  15. callTheFunction ();
  16.  
  17.  
  18.  
  19. gruß
  20. makese
makese ist offline   Mit Zitat antworten
Alt 17-02-2004, 14:17   #7 (permalink)
Farbe ist Luxus
 
Benutzerbild von ludabruda
 
Registriert seit: May 2003
Ort: Köln
Beiträge: 2.405
Hi,

du kannst einfach mehrere Parameter hintereinander übergeben (kommaseparitert) und diese mit arguments.length in einer Schleife durchgehen:

ActionScript:
  1. _global.getOutline = function ()
  2. {
  3.     for(i=0;i<arguments.length;i++) {
  4.         setOutline = new Color(arguments[i]);
  5.         setOutline.setRGB("0x"+outline_Color);
  6. }
  7. }


Grüße
Sascha

PS: ist im Prinzip das gleiche wie bei makese, nur dass die Parameter ja gleich in einem Array ankommen...
__________________
12:15, press return
ludabruda ist offline   Mit Zitat antworten
Alt 17-02-2004, 14:20   #8 (permalink)
________________
 
Benutzerbild von Katze
 
Registriert seit: May 2002
Ort: Braunschweig
Beiträge: 441
Yeahh, das funtz,

vielen Dank ihr beiden und noch einen schönen Tag....

mfg Katze
__________________
Etwas nicht zu können, ist kein Grund es nicht zu tun!

STUDIO B12 Blog
Katze ist offline   Mit Zitat antworten
Alt 17-02-2004, 14:22   #9 (permalink)
Nett hier ...
 
Benutzerbild von makese
 
Registriert seit: Nov 2002
Ort: Berlin
Beiträge: 643
...

klar geht das auch mir ner schleife .. doch die dinger sind doch performancekiller ...

aber trotzdem mal nachgefragt:
was ist besser ...
- mit ner while schleife
- mit apply
- oder mit ganz was anderem
.. zu arbeiten ????


gruß makese
makese ist offline   Mit Zitat antworten
Alt 17-02-2004, 14:32   #10 (permalink)
Farbe ist Luxus
 
Benutzerbild von ludabruda
 
Registriert seit: May 2003
Ort: Köln
Beiträge: 2.405
@makese:
ob nun while oder for-next schleife macht keinen Unterschied in der Performance, beide haben eine Eintritts- oder AUstrittsbedingung und laufen eben ein paar mal rum.

In deinem Apply-Beispiel packst du zunächst doch auch Werte in ein Array und übergibst dieses. In der Funktion selbst musst du dieses doch auch wieder in einer Schleife abarbeiten. Das schenkt sich also nix.

Die Performance mit Schleife ist für einfache Aufrufe, also bei einem Parameter sicherlich einen Hauch langsamer als der direkte Aufruf. Die Differenz liegt aber wohl eher im nicht messbaren Bereich.


Grüße
Sascha
__________________
12:15, press return
ludabruda ist offline   Mit Zitat antworten
Alt 18-02-2004, 03:45   #11 (permalink)
Neuer User
 
Registriert seit: Nov 2001
Ort: Köln
Beiträge: 106
"Apply" ist mir auch neu und sieht interssant aus... aber... ähh Momente mal: Da in Eurem Beispiel mit "apply" werden gar keine Parameter übergeben...?! Die "parameters" stecken einfach als Variablen auf _root - von daher findet die Funktion die auch.

"theFunction.apply (null, parameters);" tut hier das Gleiche wie einfach nur "theFunction();". Das Array ist ja nicht lokal deklariert von daher ist mir das auch erstmal nich aufgefallen.
Wenn man das aber macht, funzt das Ganze mit "apply" auch nicht mehr. Also da ist doch irgendwas im Argen...
das Beispiel aus der Hilfe hat genau das gleiche Problem. Tolle Sache...?! Könnte sich ein bisschen forschen lohnen, was es mit dem "apply" denn nu auf sich hat.

@makese: ein Array kann man doch auch mit einem ganz normalen Funktionsaufruf übergeben: "theFunction(meinArray);" funktioniert prima.

@ludabruda: Mit vernünftigen Schleifen hab ich in meinem letzten Spiel noch richtig spürbar Performance rausholen können. Ob das auch noch für MX2004 gilt, weiss ich noch nich. Bisher aber - und deshalb behalt ich es wohl zunächst mal bei - galt(gilt?):
- while-Schleifen anstelle von for-Schleifen verwenden
- den index dekrementieren, statt inkrementieren
- keine doppelten Bedingungen verwenden (">=" oder "<=")
- die schnellste ist die "for (i in myArray)"-Schleife, die dabei automatisch dekrementiert

Wenn es schon eine for-Schleife sein soll, würde ich darin wenigstens wo möglich mit Konstanten arbeiten: "arguments.length" bleibt ja konstant und muss nicht mit jedem Durchlauf neu ermittelt werden; das kostet wie im Beispiel gecodet jedesmal lediglich Zeit, bringt aber nix.

Ist aber ohnehin ein Paradefall für die for/in-Schleife :

ActionScript:
  1. for(i in arguments) {
  2. //irgendwas; i wird von arguments.length-1 bis 0 dekrementiert
  3. }
__________________
http://www.rumbke.de

Geändert von leif (18-02-2004 um 12:08 Uhr)
leif ist offline   Mit Zitat antworten
Alt 18-02-2004, 08:44   #12 (permalink)
Level up
 
Benutzerbild von Alois
 
Registriert seit: Jun 2001
Ort: Bocholt
Beiträge: 4.155
Schöne Erklärung leif, auch ich werde versuchen mir das zu merken, aber hier stolper ich noch ein wenig...
Zitat:
Geschrieben von leif
...
- while-Schleifen anstelle von while-Schleifen verwenden
...


Alois
__________________
-Spuckt mir auf den Stuhl, ich will im Grünen sitzen-
Alois ist offline   Mit Zitat antworten
Alt 18-02-2004, 12:09   #13 (permalink)
Neuer User
 
Registriert seit: Nov 2001
Ort: Köln
Beiträge: 106
...ähem... is nen bisschen spät geworden gestern... ... jetz stimmts.
__________________
http://www.rumbke.de
leif 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 13:29 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele