Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 27-07-2003, 20:49   #1 (permalink)
- - - - - - -
 
Benutzerbild von cyberjunk
 
Registriert seit: Jun 2002
Ort: Bremen
Beiträge: 207
Datentyp-Problem

Wenn ich diese Methode habe...

ActionScript:
  1. // LEADINGZEROES
  2. // erstellt eine neue methode für die klasse number
  3. Number.prototype.leadingZeroes = function(p) {
  4.     // p ist die variable für die anzahl der stellen die
  5.     // später angezeigt werden sollen
  6.     var s, d, i, t;
  7.     // initialisiert die variablen für diese funktion
  8.     s = this.toString();
  9.     // macht einen string aus der nummer die angezeigt werden soll
  10.     // um die anzahl der ziffern zu bekommen, aus der zahl 348 wird der string "348"
  11.     // der string "348" hat drei stellen
  12.     d = p-s.length;
  13.     // d ist die differenz der später angezeigten stellen - der vorhandenen
  14.     for (i=0; i<d; i++) {
  15.         t += "0";
  16.     }
  17.     // stellt so viele nullen vor den string, wie d gros ist
  18.     return t += s;
  19.     // und setzt den string hinten dran
  20. };
  21. zahl = 1000;
  22. anfang.text = zahl;

und diese Ausgabe mit ihr versehe,

ActionScript:
  1. _root.score = Number(Number(_root.score)+scores[combo]*multiplier).leadingZeroes(6);

erhalte ich ein falsches Ergebnis!

Warum? Ich muß irgendwie noch einen Datentyp oder so definieren...

Kann ich auch meine Methode ohne Numner nutzen?

Geändert von cyberjunk (27-07-2003 um 20:50 Uhr)
cyberjunk ist offline   Mit Zitat antworten
Alt 27-07-2003, 21:27   #2 (permalink)
dummschnack
 
Benutzerbild von Chino
 
Registriert seit: Mar 2002
Ort: Essen
Beiträge: 1.778
Klappt doch!

ActionScript:
  1. trace (Number (1234).leadingZeroes (10));

In deinem Aufruf ist ein "Number" zuviel. Du machst sofort aus dem Ergebnis (String) wieder eine Number - und schon sind die nullen wieder weg...

Edit: Die Frage ist natürlich noch, ob das Number Objekt die richtige Wahl ist. Ist schon ein wenig verwirrend, wenn dir eine Methode des Number Objektes nen String ausspuckt...

Gruss, Chino

Geändert von Chino (27-07-2003 um 21:31 Uhr)
Chino ist offline   Mit Zitat antworten
Alt 27-07-2003, 21:36   #3 (permalink)
{flasher}
 
Benutzerbild von Majo
 
Registriert seit: Mar 2003
Ort: on water
Beiträge: 2.823
es gibt keine nummer 00001234, höchstens 1234

an den prototypen kann ich mich noch erinnern, den hab ich kommentiert

und chino hat vollkommen recht....du hast einmal Number zuviel drin
__________________
hang loose
Majo ist offline   Mit Zitat antworten
Alt 27-07-2003, 21:44   #4 (permalink)
dummschnack
 
Benutzerbild von Chino
 
Registriert seit: Mar 2002
Ort: Essen
Beiträge: 1.778
Hab noch mal nachgedacht. Ich würde das eher in eine globale Funktion packen. Dann ist auch egal ob du eine Number oder einen String übergibst:

ActionScript:
  1. _global.extendDigits = function (value, digits) {
  2.     var v = value;
  3.     while (String (v).length < digits) {
  4.         v = "0" + v;
  5.     }
  6.     return v;
  7. };
  8. trace (extendDigits (1234, 10));
  9. trace (extendDigits ("1234", 10));

Gruss, Chino

Geändert von Chino (27-07-2003 um 21:46 Uhr)
Chino ist offline   Mit Zitat antworten
Alt 28-07-2003, 12:20   #5 (permalink)
- - - - - - -
 
Benutzerbild von cyberjunk
 
Registriert seit: Jun 2002
Ort: Bremen
Beiträge: 207
Thumbs up Hi @ all!

@ chino: Deine Funktion ist super. Viel besser als der Prototyp. Muss sie als _global defined sein, damit ich sie von überall im Film nutzen kann? Benutze Funktionen nur ohne, klappt aber auch!

@ all: Danke erstmal für unermüdlichen Einsatz!!!

Also, ich poste jetzt nochmal alles, damit es vertändlicher wird! Der Fehler sitzt woanders...

Bei der Ausgabe passiert folgendes:

1. Durchlauf: 40 Punkte (00040)
2. Durchlauf: 200 Punkte (00232)

= 232? Also 40+200=232?? Wie bitte kommt diese Zahl zustande?

ActionScript:
  1. // LEADINGZEROES
  2. _global.extendDigits = function (value, digits) {
  3.         var v = value;
  4.         while (String (v).length < digits) {
  5.                 v = "0" + v;
  6.         }
  7.         return v;
  8. };
  9. /*
  10. trace (extendDigits (1234, 10));
  11. trace (extendDigits ("1234", 10));
  12. */
  13. // PROCESSALL
  14. function processAll() {
  15.     //stoppt slots
  16.     for (i=1; i<5; i++) {
  17.         _root.slots["slot"+[i]].stop();
  18.     }
  19.     // macht aus s1-s4 einen array
  20.     var arr = new Array(s1, s2, s3, s4);
  21.     var scores = new Array(0, 10, 75, 10, 50, 10, 25, 100);
  22.     // wertet array aus
  23.     function arrayInfo(arr) {
  24.         var result = {};
  25.         for (var i in arr) {
  26.             result[arr[i]]++;
  27.         }
  28.         return result;
  29.     }
  30.     // check combos
  31.     function checkWinningCombos(arr) {
  32.         var info = arrayInfo(arr);
  33.         var result = {};
  34.         // jokerzähler-variable
  35.         result.joker = 0;
  36.         // sucht nach wert 7 (joker) in array info
  37.         for (var key in info) {
  38.             if (key == 7) {
  39.                 result.joker = 1;
  40.             }
  41.             if (info[key]<2 || key == 0) {
  42.                 delete info[key];
  43.             }
  44.         }
  45.         result.combos = info;
  46.         return result;
  47.     }
  48.     // calculate score
  49.     function calculateScore(arr) {
  50.         var result = checkWinningCombos(arr);
  51.         var finalScore = 0;
  52.         for (var combo in result.combos) {
  53.             var multiplier = result.combos[combo]+result.joker;
  54.             trace(combo+" --> "+multiplier+" x "+scores[combo]+" = "+scores[combo]*multiplier);
  55.             finalScore += scores[combo]*multiplier;
  56.             // ausgabe
  57.             _root.score = extendDigits(Number(_root.score)+scores[combo]*multiplier,5);
  58.         }
  59.         return finalScore;
  60.     }
  61.     trace("Score:"+calculateScore(arr));
  62. }

Geändert von cyberjunk (28-07-2003 um 12:24 Uhr)
cyberjunk ist offline   Mit Zitat antworten
Alt 28-07-2003, 12:41   #6 (permalink)
God made me funky..
 
Registriert seit: Apr 2003
Ort: Bremen
Beiträge: 1.067
Nimm noch eine Variable dazu, die den aktuellen Score als int speichert und mit der du dann rechnen kannst.

ActionScript:
  1. _global.extendDigits = function (value, digits) {
  2.         var v = value;
  3.         while (String (v).length < digits) {
  4.                 v = "0" + v;
  5.         }
  6.         return v;
  7. };
  8.  
  9.  
  10. var totalScore = 0
  11. function processAll() {
  12.     for (i=1; i<5; i++) {
  13.         _root.slots["slot"+[i]].stop();
  14.     }
  15.     // macht aus s1-s4 einen array
  16.     var arr = new Array(s1, s2, s3, s4);
  17.     var scores = new Array(0, 10, 75, 10, 50, 10, 25, 100);
  18.     totalScore +=   calculateScore(arr)
  19.     _root.score = extendDigits(totalScore,5);
  20. }
  21.  
  22. // check combos
  23. function checkWinningCombos(arr) {
  24.     var info = arrayInfo(arr);
  25.     var result = {};
  26.     // jokerzähler-variable
  27.     result.joker = 0;
  28.     // sucht nach wert 7 (joker) in array info
  29.     for (var key in info) {
  30.         if (key == 7) {
  31.             result.joker = 1;
  32.         }
  33.         if (info[key]<2 || key == 0) {
  34.             delete info[key];
  35.         }
  36.     }
  37.     result.combos = info;
  38.     return result;
  39. }
  40.  
  41. // calculate score
  42. function calculateScore(arr) {
  43.     var result = checkWinningCombos(arr);
  44.     var finalScore = 0;
  45.     for (var combo in result.combos) {
  46.         var multiplier = result.combos[combo]+result.joker;
  47.         trace(combo+" --> "+multiplier+" x "+scores[combo]+" = "+scores[combo]*multiplier);
  48.         finalScore += scores[combo]*multiplier;
  49.     }
  50.     return finalScore;
  51. }
__________________
Kunst ist in erster Linie eine Frage der Form und nicht des Inhalts
Paul Rand

Geändert von e2e4 (28-07-2003 um 12:42 Uhr)
e2e4 ist offline   Mit Zitat antworten
Alt 28-07-2003, 14:48   #7 (permalink)
- - - - - - -
 
Benutzerbild von cyberjunk
 
Registriert seit: Jun 2002
Ort: Bremen
Beiträge: 207
Hi e2e4! Schön von dir zu sehen!

Da wird wohl noch ein Fehler im Skript stecken, da er mir nicht einmal noch etwas traced! Guck es dir bitte nochmal an (ich natürlich auch)!

p.s.: von wo aus bremen kommst? kennen wir uns evtl.?
cyberjunk ist offline   Mit Zitat antworten
Alt 28-07-2003, 15:05   #8 (permalink)
- - - - - - -
 
Benutzerbild von cyberjunk
 
Registriert seit: Jun 2002
Ort: Bremen
Beiträge: 207
Wenn ich es so mache, sollte es klappen, denke ich! Jetzt kommen aber wieder so krumme Ergebnisse:

1. Score: 40 -> 00040
2. Score: 200 -> 00232

ActionScript:
  1. scoreInt = parseInt(scores[combo]*multiplier);
  2.             trace(scoreInt);
  3.             _root.score = extendDigits(Number(_root.score)+scoreInt,5);

WIE kommt die 32 zustande???

Geändert von cyberjunk (28-07-2003 um 15:56 Uhr)
cyberjunk ist offline   Mit Zitat antworten
Alt 28-07-2003, 16:57   #9 (permalink)
- - - - - - -
 
Benutzerbild von cyberjunk
 
Registriert seit: Jun 2002
Ort: Bremen
Beiträge: 207
Question

Wenn ich es so mache, dann ergibt sich wieder das gleiche Problem! Egal wie ich es verbastel!!!

ActionScript:
  1. trace("Score:"+calculateScore(arr));
  2.     _root.score = parseInt(score)+calculateScore(arr);
  3.     _root.score = extendDigits(score,5);

Große Sch...!!! Fummel schon den janzen Tach!

Geändert von cyberjunk (28-07-2003 um 17:03 Uhr)
cyberjunk ist offline   Mit Zitat antworten
Alt 28-07-2003, 17:10   #10 (permalink)
God made me funky..
 
Registriert seit: Apr 2003
Ort: Bremen
Beiträge: 1.067
Ach gott, ich hab vergessen die arrayInfo Funktion mit zu kopieren
ActionScript:
  1. function arrayInfo(arr) {
  2.         var result = {};
  3.                 for (var i in arr) {
  4.                         result[arr[i]]++;
  5.                 }
  6.                 return result;
  7.         }
  8. }

die bitte mal vor
ActionScript:
  1. // check combos
  2.  

einfügen


Ach ja, reicht dir "Neustadt" als Info für das Woher
__________________
Kunst ist in erster Linie eine Frage der Form und nicht des Inhalts
Paul Rand
e2e4 ist offline   Mit Zitat antworten
Alt 28-07-2003, 17:25   #11 (permalink)
- - - - - - -
 
Benutzerbild von cyberjunk
 
Registriert seit: Jun 2002
Ort: Bremen
Beiträge: 207
@ e2e4
Super!!! Das funzt wie wild! Einziges Problem noch: ich erhalte die trace-Ausgabe jetzt doppelt!

Neustadt also, ich sitz in Hemelingen (falls das interessiert)!

Guck bitte noch mal nach:

ActionScript:
  1. // LEADINGZEROES
  2. _global.extendDigits = function (value, digits) {
  3.         var v = value;
  4.         while (String (v).length < digits) {
  5.                 v = "0" + v;
  6.         }
  7.         return v;
  8. };
  9. /*
  10. trace (extendDigits (1234, 10));
  11. trace (extendDigits ("1234", 10));
  12. */
  13. // PROCESSALL
  14. function processAll() {
  15.     //stoppt slots
  16.     for (i=1; i<5; i++) {
  17.         _root.slots["slot"+[i]].stop();
  18.     }
  19.     // macht aus s1-s4 einen array
  20.     var arr = new Array(s1, s2, s3, s4);
  21.     // scores: null, apple, coin3x, banana, coin2x, cherry, coin1x, joker
  22.     var scores = new Array(0, 10, 75, 10, 50, 10, 25, 100);
  23.     totalScore +=   calculateScore(arr)
  24.     _root.score = extendDigits(totalScore,5);
  25.  
  26.     // wertet array aus
  27.     function arrayInfo(arr) {
  28.         var result = {};
  29.         for (var i in arr) {
  30.             result[arr[i]]++;
  31.         }
  32.         return result;
  33.     }
  34.     // check combos
  35.     function checkWinningCombos(arr) {
  36.         var info = arrayInfo(arr);
  37.         var result = {};
  38.         // jokerzähler-variable
  39.         result.joker = 0;
  40.         // sucht nach wert 7 (joker) in array info
  41.         for (var key in info) {
  42.             if (key == 7) {
  43.                 result.joker = 1;
  44.             }
  45.             if (info[key]<2 || key == 0) {
  46.                 delete info[key];
  47.             }
  48.         }
  49.         result.combos = info;
  50.         return result;
  51.     }
  52.     // calculate score
  53.     function calculateScore(arr) {
  54.         var result = checkWinningCombos(arr);
  55.         var finalScore = 0;
  56.         for (var combo in result.combos) {
  57.             var multiplier = result.combos[combo]+result.joker;
  58.             trace(combo+" --> "+multiplier+" x "+scores[combo]+" = "+scores[combo]*multiplier);
  59.             finalScore += scores[combo]*multiplier;
  60.         }
  61.         return finalScore;
  62.     }
  63.     trace("Score:"+calculateScore(arr));
  64. }

Mich interessiert auch, wo der Unterschied der Definitionen meiner Funktionen ist? _global.extendDigits = function (value, digits) { und function processAll () {

Geändert von cyberjunk (28-07-2003 um 17:27 Uhr)
cyberjunk ist offline   Mit Zitat antworten
Alt 28-07-2003, 17:39   #12 (permalink)
God made me funky..
 
Registriert seit: Apr 2003
Ort: Bremen
Beiträge: 1.067
Zitat:
Geschrieben von cyberjunk
@ e2e4
Super!!! Das funzt wie wild! Einziges Problem noch: ich erhalte die trace-Ausgabe jetzt doppelt!

Neustadt also, ich sitz in Hemelingen (falls das interessiert)!

Guck bitte noch mal nach:

ActionScript:
  1. //erster Aufruf von calculateScore -> erstes Trace
  2.     totalScore +=   calculateScore(arr)
  3. ...
  4. ...
  5. ...
  6. //zweiter Aufruf von calculateScore -> zweites Trace
  7.     trace("Score:"+calculateScore(arr));
  8. }
Für eine ausführlich Erklärung zu _global und Namespaces habe ich atm leider keine Zeit, schau dir einfach mal die Hilfe zu _global an, vielleicht reicht dir das.(Ansonsten nachfragen...)
__________________
Kunst ist in erster Linie eine Frage der Form und nicht des Inhalts
Paul Rand
e2e4 ist offline   Mit Zitat antworten
Alt 28-07-2003, 17:50   #13 (permalink)
dummschnack
 
Benutzerbild von Chino
 
Registriert seit: Mar 2002
Ort: Essen
Beiträge: 1.778
Ich schalt mich noch mal kurz ein!

Also: _global hat den Vorteil, dass du mit _global definierte Variablen, Funktionen etc. aus allen Zeitleisten eines Movies ansprechen kannst ohne den Pfad anzugeben.

Wenn du mal angenommen einen MC auf _root liegen hast, musst du den Pfad zur Funktion explizit angeben. Z.B:

ActionScript:
  1. _root.extendDigits(1234,10);
  2. //oder
  3. this._parent.extendDigits(1234,10);

Bei _global kannst du stattdessen aus jedem beliebigen MC/Level die Funktion einfach so aufrufen:
ActionScript:
  1. extendDigits(1234,10);

Alles Tacko?

Gruss, Chino
Chino ist offline   Mit Zitat antworten
Alt 28-07-2003, 18:11   #14 (permalink)
- - - - - - -
 
Benutzerbild von cyberjunk
 
Registriert seit: Jun 2002
Ort: Bremen
Beiträge: 207
@ e2e4
Mist! Ich habe festgestellt, daß er bei vier Jokern irgendwie auf 5x100=500 kommt. ...kann ich mir nicht erklären!

7 --> 5 x 100 = 500

Das mit _global ist estmal Ok. Habe nachgeguckt!

Das mit dem Trace habe ich jetzt im Griff... gecheckt, warum etwas ohne trace getraced wird habe ich aber noch nicht...

@ chino
Alles Tacko!!! Danke. Habe ich gecheckt. Kannst auch noch ma nachgucken, warum er bei vier Jokern 500 ausrotzt?

Geändert von cyberjunk (28-07-2003 um 19:45 Uhr)
cyberjunk ist offline   Mit Zitat antworten
Alt 28-07-2003, 18:35   #15 (permalink)
God made me funky..
 
Registriert seit: Apr 2003
Ort: Bremen
Beiträge: 1.067
änder mal

ActionScript:
  1. if (key == 7) {
  2.     result.joker = 1;
  3. }

zu

ActionScript:
  1. if (key == 7 && info[key] != 4) {
  2.     result.joker = 1;
  3. }

den Fall hatte ich nicht bedacht, das bei 4 Jokern natürlich der Joker nicht mehr mitgezählt werden darf
__________________
Kunst ist in erster Linie eine Frage der Form und nicht des Inhalts
Paul Rand
e2e4 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 03:52 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele