Don P: Mensch ärgere dich nicht als Browsergame in JS

Beitrag lesen

Hallo Felix,

Object.create(parcours)

Ist das im Grunde ein Cloning?

Es liefert ein ein neues Objekt mit dem übergebenen Objekt als prototype. Eine Erfindung von D. Crockford, die jetzt in ECMAScript 5 aufgenommen wurde mit noch etwas zusätzlichem Zucker. Wird noch nicht breit unterstützt (kenne nur FF 4 Beta), inzwischen kann man sich aber mit behelfen mit

Object_create = Object.create || function (o) {  
   var F = function() {};  
   F.prototype = o;  
   return new F();  
};

Diese Funktion benutze ich seit langem, um Objekte direkt aus anderen zu erzeugen, ohne dass man immer Konstruktoren mit new aufrufen muss.

grün.parcours = Object.create(parcours).rotate(10)

Bedeutet das "erst clonen, dann rotieren"? Die rotate-Methode ist wohl so etwas wie array.push(array.shift()), und bei negativen Werten array.unshift(array.pop()) - in einer Schleife?

So ist es. Diese push-pop sind nicht wirklich performancekritisch. Es müssten schon einige hunderttausende Operationen sein bei so einem Spiel, damit man etwas merkt bei der Performance.

Ist das performanter? Braucht das nicht mehr Arbeitsspeicher für den Browser? Bei der gegenwärtigen Anwendung ist das alles ja sehr überschaubar (16 Spielsteinobjekte, etwa 70 Waypoint-Objekte), sodass Performanz und RAM-Usage wohl kaum ins Gewicht fallen dürften.

Performanter nicht unbedingt, und ein bisschen mehr Speicher braucht es vielleicht auch. Es gibt halt für jede Spielfigur ein separates Parcours-Array, also mind. 16 Arrays mehr.

Es würde aber den Quellcode stark vereinfachen und auch auch die Array-Elemente kleiner halten. Das nächste Element z.B. muss man nicht speichern in einem Array, dafür hat ein Array doch die Indizes.

Tatsächlich hätte man auch nach dem "Klonen" jeden Wert nur einmal gespeichert, im prototype jedes Klons, dem eigentlichen Spielbrett. In diesem Ur-Parcours würde man z.B. statt Name und nextPoint lieber eine Eigenschaft "besetzt" einführen, die dann jeweils mit dem Spielstein-Objekt belegt wird, das gerade draufsteht (oder null, wenn keiner draufsteht).

grün.Figur[i].weg = Object.create(grün.parcours);

Also bei Variablen mit Sonderzeichen bin ich seeeehr vorsichtig. Daher nenne ich mein zentrales Objekt auch nicht MÄDN, sondern MAEDN.

Ja stimmt, das mus nicht sein. Wenn man als UTF-8 speichert und das auch im script-tag angibt, sollte es aber kein Problem geben.

Gruß, Don P

0 92

Mensch ärgere dich nicht als Browsergame in JS

Felix Riesterer
  • seitenbewertung
  1. 0
    Kai345
    1. 0
      Felix Riesterer
  2. 0
    suit
    1. 0
      Felix Riesterer
      1. 0
        Gunnar Bittersmann
        1. 0
          Felix Riesterer
          1. 0
            Gunnar Bittersmann
    2. 0
      Detlef G.
      1. 0
        Gunnar Bittersmann
  3. 0
    Gunnar Bittersmann
    1. 0
      Felix Riesterer
      1. 0
        Gunnar Bittersmann
        1. 0
          Felix Riesterer
  4. 0
    LX
    1. 0
      Der Martin
      1. 0
        LX
      2. 0

        Tippfehler in der Signatur

        hgfhfs
        • menschelei
    2. 0
      Felix Riesterer
    3. 0
      Gunnar Bittersmann
  5. 0
    Der Martin
    1. 0
      Kai345
      1. 2
        Tom
        1. 0
          Felix Riesterer
      2. 0
        Felix Riesterer
    2. 0
      Felix Riesterer
      1. 0
        Der Martin
        1. 0
          Felix Riesterer
          1. 0
            Detlef G.
  6. 2
    Gernot Back
    1. 0
      Felix Riesterer
      1. 0
        Gernot Back
  7. 0
    Blubb
    1. 0
      Felix Riesterer
      1. 0
        Matthias Apsel
    2. 0
      Gunnar Bittersmann
      1. 0
        Felix Riesterer
  8. 0
    Klawischnigg
    1. 0
      Felix Riesterer
      1. 0
        Der Martin
        1. 0
          Felix Riesterer
          1. 0
            Der Martin
            1. 0
              Felix Riesterer
              1. 0
                Der Martin
      2. 0
        Gunnar Bittersmann
        1. 0
          Felix Riesterer
          1. 0
            Gunnar Bittersmann
            1. 0
              Gunnar Bittersmann
              1. 0
                Der Martin
                1. 0
                  Gunnar Bittersmann
  9. 0
    romy
    1. 0
      romy
    2. 0
      Felix Riesterer
  10. 0
    Gunnar Bittersmann
    1. 0
      Felix Riesterer
      1. 0
        Kai345
        1. 0
          Felix Riesterer
    2. 0
      O'Brien
    3. 0
      Don P
      1. 0
        Der Martin
        1. 0
          Felix Riesterer
          1. 0
            Eingefroren
            1. 0
              Felix Riesterer
      2. 0
        Felix Riesterer
        1. 0
          Don P
          1. 0
            Felix Riesterer
  11. 0

    Schneller? Schneller!

    Felix Riesterer
    1. 0
      Gunnar Bittersmann
  12. 0
    Don P
    1. 0
      Felix Riesterer
      1. 0
        Don P
    2. 0

      "ängstliche" Spielfiguren länger ängstlich sein lassen

      Felix Riesterer
      1. 0
        Don P
        1. 0
          Felix Riesterer
          1. 0
            Don P
            1. 0
              Don P
  13. 0
    O'Brien
  14. 0

    Schlagzwang optional + neue Hierarchie der möglichen Spielsteine

    Felix Riesterer
    1. 0
      Der Martin
      1. 0
        Felix Riesterer
        1. 0
          Der Martin
          1. 0
            Felix Riesterer
            1. 0
              Der Martin
              1. 0
                O'Brien
                1. 0
                  Der Martin
              2. 0
                Felix Riesterer
                1. 0
                  Der Martin
                  1. 0

                    Warum Grafiken vorladen...?

                    Felix Riesterer
  15. 0

    Safari unter iPhone macht mit

    Felix Riesterer
    • browser
  16. 0

    Spielregeln ergänzt - Kritik?

    Felix Riesterer
    1. 0
      Don P
  17. 0

    MÄDN: Spielregeln, individuelle Details

    Der Martin
    • sonstiges