Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 15-05-2004, 11:50   #1 (permalink)
Neuer User
 
Benutzerbild von :: RK ::
 
Registriert seit: Jan 2002
Ort: Umgebung Stuttgart
Beiträge: 5.412
kann man das noch optimieren ???

hi,

inspiriert durch dieses Game:
http://www.flashforum.de/forum/showt...hreadid=127086

hab ich mich mal drann gesetzt, um die steuerung nachzubauen.
nun wollt ich euch fragen ob das auch einfacher geht bzw. ob man
das noch optimieren kann ???

is noch ganz frisch aus der AS schmiede
ActionScript:
  1. kL = new Object();
  2. kL.onKeyDown = function() {
  3.     if (Key.getCode() == 38) {
  4.         flyObj.yDir = "up";
  5.         flyObj.gotoAndStop(4);
  6.     }
  7.     if (Key.getCode() == 37) {
  8.         flyObj.xDir = "left";
  9.         flyObj.gotoAndStop(2);
  10.     }
  11.     if (Key.getCode() == 39) {
  12.         flyObj.xDir = "right";
  13.         flyObj.gotoAndStop(3);
  14.     }
  15. };
  16. //
  17. kL.onKeyUp = function() {
  18.     if (Key.getCode() == 38) {
  19.         flyObj.yDir = "down";
  20.     }
  21.     if ((Key.getCode() == 37) || (Key.getCode() == 39)) {
  22.         flyObj.xDir = "center";
  23.     }
  24.     flyObj.gotoAndStop(1);
  25. };
  26. //------------------------------------------------------------
  27. MovieClip.prototype.moveDown = function() {
  28.     this.ySpeed += this.yAcceleration;
  29. };
  30. //
  31. MovieClip.prototype.center = function() {
  32.     if (this.xSpeed>0) {
  33.         this.xSpeed -= this.xAcceleration/2;
  34.     }
  35.     if (this.xSpeed<0) {
  36.         this.xSpeed += this.xAcceleration/2;
  37.     }
  38. };
  39. //
  40. MovieClip.prototype.moveUp = function() {
  41.     this.ySpeed -= this.yAcceleration;
  42. };
  43. //
  44. MovieClip.prototype.moveLeft = function() {
  45.     this.xSpeed -= this.xAcceleration;
  46. };
  47. //
  48. MovieClip.prototype.moveRight = function() {
  49.     this.xSpeed += this.xAcceleration;
  50. };
  51. //
  52. MovieClip.prototype.fly = function() {
  53.     this.onEnterFrame = function() {
  54.         if (this.yDir == "up") {
  55.             this.moveUp();
  56.         }
  57.         if (this.yDir == "down") {
  58.             this.moveDown();
  59.         }
  60.         if (this.xDir == "left") {
  61.             this.moveLeft();
  62.         }
  63.         if (this.xDir == "right") {
  64.             this.moveRight();
  65.         }
  66.         if (this.xDir == "center") {
  67.             this.center();
  68.         }
  69.         if (this._y>Stage.height) {
  70.             this._y = 0-this._height;
  71.         } else if (this._y<(0-this._height)) {
  72.             this._y = Stage.height;
  73.         }
  74.         if (this._x>Stage.width) {
  75.             this._x = 0-this._width;
  76.         } else if (this._x<(0-this._width)) {
  77.             this._x = Stage.width;
  78.         }
  79.         this._y += this.ySpeed;
  80.         this._x += this.xSpeed;
  81.     };
  82. };
  83. //------------------------------------------------------------
  84. Key.addListener(kL);
  85. flyObj = mc1;
  86. flyObj.yAcceleration = 0.1;
  87. flyObj.xAcceleration = 0.1;
  88. flyObj.ySpeed = 0;
  89. flyObj.xSpeed = 0;
  90. flyObj.yDir = "down";
  91. flyObj.xDir = "center";
  92. flyObj.fly();
wer's mal testen will, copy&paste ins erste Frame, nen kleinen
kreis zeichnen und "mc1" nennen, Registrierungspunkt: links oben.


__________________
Das Glück im Leben hängt von den guten Gedanken ab, die man hat.

Easing_Equations / Flash Kontaktformular / FlashPlugin W3C konform / Nützliche Beiträge zu FAQs
:: RK :: ist offline   Mit Zitat antworten
Alt 15-05-2004, 14:10   #2 (permalink)
Neuer User
 
Benutzerbild von :: RK ::
 
Registriert seit: Jan 2002
Ort: Umgebung Stuttgart
Beiträge: 5.412
ok, hab gemerkt, dass die ganzen PROTOTYPEN nicht nötig sind
ActionScript:
  1. Stage.scaleMode = "noScale";
  2. Stage.align = "TL";
  3. Stage.showMenu = false;
  4. //
  5. kL = new Object();
  6. kL.onKeyDown = function() {
  7.     if (Key.getCode() == 38) {
  8.         flyObj.yDir = "up";
  9.     }
  10.     if (Key.getCode() == 37) {
  11.         flyObj.xDir = "left";
  12.     }
  13.     if (Key.getCode() == 39) {
  14.         flyObj.xDir = "right";
  15.     }
  16. };
  17. //
  18. kL.onKeyUp = function() {
  19.     if (Key.getCode() == 38) {
  20.         flyObj.yDir = "down";
  21.     }
  22.     if ((Key.getCode() == 37) || (Key.getCode() == 39)) {
  23.         flyObj.xDir = "center";
  24.     }
  25.     flyObj.gotoAndStop(1);
  26. };
  27. //------------------------------------------------------------
  28. MovieClip.prototype.fly = function() {
  29.     this.onEnterFrame = function() {
  30.         //
  31.         if (this.yDir == "up") {
  32.             this.ySpeed -= this.yAcceleration;
  33.             this.gotoAndStop(4);
  34.         }
  35.         if (this.yDir == "down") {
  36.             this.ySpeed += this.yAcceleration;
  37.         }
  38.         if (this.xDir == "left") {
  39.             this.xSpeed -= this.xAcceleration;
  40.             this.gotoAndStop(2);
  41.         }
  42.         if (this.xDir == "right") {
  43.             this.xSpeed += this.xAcceleration;
  44.             this.gotoAndStop(3);
  45.         }
  46.         if (this.xDir == "center") {
  47.             if (this.xSpeed>0) {
  48.                 this.xSpeed -= this.xAcceleration/5;
  49.             }
  50.             if (this.xSpeed<0) {
  51.                 this.xSpeed += this.xAcceleration/5;
  52.             }
  53.         }
  54.         //
  55.         if ((this.xDir == "left") && (this.yDir == "up")) {
  56.             this.gotoAndStop(6);
  57.         }
  58.         if ((this.xDir == "right") && (this.yDir == "up")) {
  59.             this.gotoAndStop(5);
  60.         }
  61.         //
  62.         if (this._y>Stage.height) {
  63.             this._y = 0-this._height;
  64.         } else if (this._y<(0-this._height)) {
  65.             this._y = Stage.height;
  66.         }
  67.         if (this._x>Stage.width) {
  68.             this._x = 0-this._width;
  69.         } else if (this._x<(0-this._width)) {
  70.             this._x = Stage.width;
  71.         }
  72.         this._y += this.ySpeed;
  73.         this._x += this.xSpeed;
  74.     };
  75. };
  76. //------------------------------------------------------------
  77. Key.addListener(kL);
  78. flyObj = mc1;
  79. flyObj.yAcceleration = 0.05;
  80. flyObj.xAcceleration = 0.05;
  81. flyObj.ySpeed = 0;
  82. flyObj.xSpeed = 0;
  83. flyObj.yDir = "down";
  84. flyObj.xDir = "center";
  85. flyObj.fly();
aber sonst ???
__________________
Das Glück im Leben hängt von den guten Gedanken ab, die man hat.

Easing_Equations / Flash Kontaktformular / FlashPlugin W3C konform / Nützliche Beiträge zu FAQs
:: RK :: ist offline   Mit Zitat antworten
Alt 15-05-2004, 18:48   #3 (permalink)
Neuer User
 
Registriert seit: Dec 2003
Beiträge: 90
Hi!

Ich würde anstatt der ganzen IF-Abfragen (mindestens bei den Key ...), Case (Switch/Case) verwenden. Das wäre auf jedenfall eine Optimierung.

:-)

Gruß Nova
Novanic ist offline   Mit Zitat antworten
Alt 15-05-2004, 20:49   #4 (permalink)
eeeek!
 
Benutzerbild von juggernart
 
Registriert seit: Aug 2002
Ort: Augsburg
Beiträge: 210
Die Frage ist, nach was du optimieren willst?
Willst du nen Schönheitswettbewerb mit deinem code gewinnen oder bessere Performance?

switch/case ist bestenfalls ne optische Verbesserung. Bei Performance-Tests mit if/else if und switch/case ergibt sich bei mir praktisch immer dasselbe.

auch interessant: http://www.oddhammer.com/actionscriptperformance/
juggernart ist offline   Mit Zitat antworten
Alt 15-05-2004, 21:54   #5 (permalink)
Neuer User
 
Registriert seit: Dec 2003
Beiträge: 90
Hi,

ich glaub schon das Switch/Case schneller läuft als IF THEN ELSE! Ich glaube kaum das bei Switch/Case intern das gleiche abläuft wie bei IF.

Gruß Nova
Novanic ist offline   Mit Zitat antworten
Alt 16-05-2004, 08:57   #6 (permalink)
eeeek!
 
Benutzerbild von juggernart
 
Registriert seit: Aug 2002
Ort: Augsburg
Beiträge: 210
Glauben und Wissen ist ein Unterschied

ActionScript:
  1. t = getTimer();
  2. for (i=0; i<10000; i++) {
  3.     k++;
  4.     if (k == 1) {
  5.     } else if (k == 2) {
  6.     } else if (k == 3) {
  7.     } else if (k == 4) {
  8.     } else if (k == 5) {
  9.         k = 0;
  10.     }
  11. }
  12. t = getTimer()-t;
  13. output_txt.text = t;
  14. //
  15. t = getTimer();
  16. for (i=0; i<10000; i++) {
  17.     k++;
  18.     switch (k) {
  19.     case 1 :
  20.         break;
  21.     case 2 :
  22.         break;
  23.     case 3 :
  24.         break;
  25.     case 4 :
  26.         break;
  27.     case 5 :
  28.         k = 0;
  29.     }
  30. }
  31. t = getTimer()-t;
  32. output_txt.text += "\r"+t;
juggernart ist offline   Mit Zitat antworten
Alt 16-05-2004, 10:59   #7 (permalink)
Neuer User
 
Registriert seit: Dec 2003
Beiträge: 90
Aber das wird der Compiler/Interpreter intern ja wohl kaum genau so machen wie IF THEN ELSE! Der Compiler/Interpreter springt dann ja direkt zu dem entsprechenden Wert und prüft nicht jede Anweisung einzelnt durch! Das hat 100pro andere Gründe als optik, die Optik wird ja nicht mal besser und bei z.B. C++ haben die Switch/Case mit Sicherheit nicht für die Optik erfunden!

Es wird ja nicht jeder Wert geprüft, sondern direkt zu dem entsprechenden Wert gesprungen! Und wenn es wirklich genau das Gleiche wäre, warum sieht das Strukturgramm von Switch/Case dann auch völlig anders aus als bei IF THEN ELSE?

Gruß Nova
Novanic ist offline   Mit Zitat antworten
Alt 16-05-2004, 11:13   #8 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
naja, wie das intern aussieht, kannste dir ja einfach mal mit Flashm ansehen, jedenfalls ist die switch/case-Struktur im Schnitt etwas langsamer.
Janoscharlipp ist offline   Mit Zitat antworten
Alt 16-05-2004, 20:34   #9 (permalink)
eeeek!
 
Benutzerbild von juggernart
 
Registriert seit: Aug 2002
Ort: Augsburg
Beiträge: 210
Ehrlich gesagt ist es mir wurscht, wie Flash die Anweisungen intern abarbeitet.
Mich interessiert nur, was schneller ist, und das kann man mit solchen Tests nachprüfen.

Nicht, dass ich hier klugschei..ern möchte, aber was letztlich zählt sind doch die Fakten.
juggernart ist offline   Mit Zitat antworten
Alt 16-05-2004, 22:24   #10 (permalink)
Herr Brot
 
Benutzerbild von mati
 
Registriert seit: Dec 2002
Beiträge: 1.692
hi RK,

also, zumindest bei der Version mit IF-Abfragen kannst du noch einige Zeit rausholen wenn du ans ende jedes IF-Blocks ein return; einfügst, denn sobald die Taste gefunden wurde müssen die anderen Abfragen ja nicht mehr durchgeführt werden


grüße, mati
__________________
„Ich war geheilt, all right!“
mati ist offline   Mit Zitat antworten
Alt 17-05-2004, 14:41   #11 (permalink)
Neuer User
 
Benutzerbild von :: RK ::
 
Registriert seit: Jan 2002
Ort: Umgebung Stuttgart
Beiträge: 5.412
hi,

danke mati, endlich ne vernünftige antwort
und kannst du auch erklären, warum das so ist ???

wenn nicht, ist das auch net schlimm, würd ich halt
interessieren
__________________
Das Glück im Leben hängt von den guten Gedanken ab, die man hat.

Easing_Equations / Flash Kontaktformular / FlashPlugin W3C konform / Nützliche Beiträge zu FAQs
:: RK :: ist offline   Mit Zitat antworten
Alt 17-05-2004, 17:33   #12 (permalink)
Herr Brot
 
Benutzerbild von mati
 
Registriert seit: Dec 2002
Beiträge: 1.692
hi RK,

klar, kein prob.
Zitat:
return:

Beschreibung
Aktion; gibt den von einer Funktion zurückgegebenen Wert an. Die Aktion return wertet ausdruck aus und gibt das Ergebnis als Wert der Funktion zurück, in der sie ausgeführt wird. Die Aktion return beendet die Funktion und ersetzt sie durch den Rückgabewert. Wenn die Anweisung return alleine verwendet wird, wird null zurückgegeben.
das heißt in unserm fall, dass die funktion also beendet wird und "null" zurückgegeben wird. das ist uns egal, weil wir von der fkt ja keinen rückgabewert erwarten bzw. auswerten... folgendes beispiel zeigt vielleicht die funktionsweise am einfachsten (just copy&paste):
ActionScript:
  1. var testi = 2;
  2. function test(wert) {
  3.     trace("abfrage1");
  4.     if (wert==1) {
  5.         trace("1");
  6.         return;
  7.     }
  8.     trace("abfrage2");
  9.     if (wert==2) {
  10.         trace("2");
  11.         return;
  12.     }
  13.     trace("abfrage3");
  14.     if (wert==3) {
  15.         trace("3");
  16.         return;
  17.     }
  18.     trace("alle durch");
  19. }
  20. test(testi);


gruß, mati

immer noch unklar? nochmal fragen!
__________________
„Ich war geheilt, all right!“
mati ist offline   Mit Zitat antworten
Alt 17-05-2004, 17:40   #13 (permalink)
Neuer User
 
Benutzerbild von :: RK ::
 
Registriert seit: Jan 2002
Ort: Umgebung Stuttgart
Beiträge: 5.412
Zitat:
Geschrieben von mati
...
immer noch unklar? nochmal fragen!
nope, alles klar, tausend dank
__________________
Das Glück im Leben hängt von den guten Gedanken ab, die man hat.

Easing_Equations / Flash Kontaktformular / FlashPlugin W3C konform / Nützliche Beiträge zu FAQs
:: RK :: 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 17:42 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele