Klassendaklaration und Objekterzeugung

Hallo,
zu aller Erst sei gesagt, dass ich JS nicht kann. Ich dachte mir aber: Ich kann schon die Objektorientierten Sprachen PHP und Java, da kann es ja nicht so schwer sein, mal eben was in JS da hin zu stolpern.

So, jetzt zum Vorhaben: Ich will eine Tile-Map erstellen. Beim ersten Versuch war das Ziel, dass die Karte sich über den gesamten Bildschirm erstreckt. Der User sollte die Karte ganz elegant bewegen können, indem er mit der Maus Richtung Fensterrand / Bildschirmrand bei Vollbild fährt. Eben so, wie bei einem fest installieren Computerspiel. Das habe ich jetzt gerade aufgegeben: Kein Rechner der Welt kommt da mit dem Rechnen hinterher. Um das zu machen muss ich wohl über bessere JS-Kenntnisse verfügen.

So, neuer Versuch, neues Glück. Jetzt mache ich eine kleine Map mit fester Größer, ohne weiches Scrollen, sondern immer nur mit der kleinsten Einheit von einem Tile, das man weiter hüpfen kann. Vorher war die kleinste Einheit ein einzelnes Pixel.

Ich bin in dem neuen Versuch er so weit und es gibt schon Probleme:

 Testspielwelt
 var map = Array(60);
 for(var i = 0; i \< 60; i++)
 {
 map[i] = Array(40);
 for(var j = 0; j \< 40; j++)
 {
 map[i][j] = new tile(j, i);
 }
 }

 class tile
 {
 var x;
 var y;

 function tile(x, y)
 {
 this.x = x;
 this.y = y;
 }
 }

Die Fehlerkonsole gibt: „missing ; before statement“ aus und verweist auf Zeile 20. Zeile 20 ist „class tile“ (oben habe ich etwas vor dem JS-Beginn ausgelassen, also mehr als das habe ich nicht im JS-Teil stehen).

Wie löse ich das Problem?

mfg Christoph

Hi omg,

in JS gibt es kein Schlüsselwort „class“.

Das, was Du versuchst, geht in JS folgendermaßen:

function MeineKlasse(){
 this.meineEigsch1 = "abc";
 this.meineEigsch2 = "xyz";

 this.meineMethode = function(){
 // Inhalt
 }
}

var obj = new MeineKlasse();

Schöne Grüße,

Mohamed.

Hi omg,

in JS gibt es kein Schlüsselwort „class“.

Hallo. Was heißt hier „omg“? Ich habe doch gesagt, dass ich kein JS kann und mir meine Vorgehensweise nur aus meinem Wissen bezüglich anderer Sprachen zusammen reime.

Vielen Dank für die kleine Einweisung. Warum die Macher von JS eine Klassendeklaration mit „function“ kennzeichnen lassen, ist mir zwar nicht ganz klar, dennoch bin ich zufrieden damit, wenn es funktioniert. Danke.

mfg Christoph

omg (OT)
Hallo Christoph,

mit „omg“ habe ich Deinen Nicknamen in einer Abkürzung benutzt, um Dich anzusprechen, nicht um Fassungslosigkeit auszudrücken. Also, keep cool :smile:

Schöne Grüße,

Mohamed.

hallo christoph,

Vielen Dank für die kleine Einweisung. Warum die Macher von JS
eine Klassendeklaration mit „function“ kennzeichnen lassen,

nicht nur mit function

auch über J ava S cript O bject N otation


var tile = {
x: 0,
y: 0,
info: function () { return this.x + this.y ;}
}

wird wie bei einem Array mit push erweitert und ebenso über tile[x] angesprochen

… das zu class :smile:)

mir kommt die Logik nicht ganz rüber:
ein 2d-Array in dem Koordinaten gespeichert werden?
das 2d-Array ansich sind ja schon Koordinaten … was omg & wtf … soll da gespeichert werden??

egal … wie Du Deinen Brain in omg-wtf JS umsetzen kannst … ist es doch herzallerliebst Deinen nick abzukürzen

mfg
KKO (nichts animiert zum Kürzen)

Hallo,

mir kommt die Logik nicht ganz rüber:
ein 2d-Array in dem Koordinaten gespeichert werden?
das 2d-Array ansich sind ja schon Koordinaten … was omg & wtf
… soll da gespeichert werden??

Das ist dafür gut, falls das Objekt mal etwas tun soll, wofür es seine genaue Position im Array (die natürlich die gleiche, wie die auf der Karte, ist) kennen muss. Dann kann jedes Objekt ganz einfach den x- oder y-Wert nutzen, ohne, dass man ihn der Methode als Parameter übergeben muss. Um Ressourcen zu sparen, werde ich das wohl früher oder später entfernen, aber jetzt sollte das die Übersichtlichkeit wahren. Es ist schließlich viel einfacher zu verstehen, dass ein Objekt etwas tut, wofür es einfach eine Eigenschaft von sich selbst nimmt, als wenn diese Eigenschafen durch Parameter vorgegeben werden.

mfg Christoph

hallo,

hört sich ja interessant an


function tile(x, y){
this.x = x;
this.y = y;
}

var map = new Array(60);
for(var i = 0; i

map[0][5].x hat Wert 5
map[0][5].y hat Wert 0

Du könntest der function tile auch eine Methode geben:


this.info= function(){return this.x + " " + this.y}

map[0][5].info() liefert dann „5 0“

Gruß
Klaus