Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

11

04.08.2016, 09:41

Soweit ich das aber lese (zumindest laut Mozilla), ist der Support noch eher mau/unklar?

Ansonsten gebe ich dir vollkommen recht: Damit kann man das endlich mal ohne ständiges Kopfschütteln nutzen. Wenn jetzt das Scoping-Problem noch vernünftig gelöst wird, hurra! :D

Tobiking

1x Rätselkönig

  • Private Nachricht senden

12

04.08.2016, 10:15

Soweit ich das aber lese (zumindest laut Mozilla), ist der Support noch eher mau/unklar?

Die Browserhersteller haben relativ früh damit angefangen subsets von es6 einzubauen. Wenn man alte (nicht mehr weiterentwickelte) Browser ignorieren kann, ist class relativ gut unterstützt (http://kangax.github.io/compat-table/es6/).


Ansonsten gebe ich dir vollkommen recht: Damit kann man das endlich mal ohne ständiges Kopfschütteln nutzen. Wenn jetzt das Scoping-Problem noch vernünftig gelöst wird, hurra! :D

Wenn du local scoped variables suchst, gibt es jetzt let (https://developer.mozilla.org/de/docs/We…/Statements/let).

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

13

04.08.2016, 11:27

Zu der Aussage, JavaScript würde Klassen beinhalten: das ist ein wenig irreführend. JavaScript funktioniert intern noch genauso wie vorher, nur vereinfachen die neuen Schlüsselwörter (streng genommen sind sie nicht neu, nur besitzen sie erst seit kurzem eine Funktion) die Definition der Funktionen (bzw. Konstruktoren), wie es auch auf der verlinkten MDN-Seite beschrieben wird. Ersichtlich wird das bspw. wenn man sich ausgeben lässt, was eine solche "Klasse" ist: eine function

Hast du an sich recht, schlimm ist das aber erst mal nicht. Es vereinfacht halt das erzeugen von Klassen und macht das im Code vor allem ersichtlicher.

Soweit ich das aber lese (zumindest laut Mozilla), ist der Support noch eher mau/unklar?

Ich nutze JavaScript eher seltener. Bis jetzt habe ich mit diesem Feature keine Probleme gehabt, habe es aber noch nicht in älteren Browsern getestet. Allgemein sollte man denke ich vorher gucken welche Browserbase man bewirten möchte und dann kann man gucken welche Features vorhanden sind.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

14

04.08.2016, 12:16

Mit Tools wie z.B. Babel kann man aber auch jetzt schon ES6 komplett nutzen und trotzdem alte Browser unterstützen.

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

15

04.08.2016, 15:05

Wenn du local scoped variables suchst, gibt es jetzt let (https://developer.mozilla.org/de/docs/We…/Statements/let).


Ja let kenne ich, allerdings kann das bspw. Safari noch nicht :rolleyes: . Was ich eher meine sind, dass wenn man mehrere libs hat, immer den globalen Raum belegt, weil es keine namespaces gibt, das muss man immer aufpassen. Teilweise hat man dann ja das Problem, dass bei Einbindung von einer lib der rest der Anwendung nicht mehr geht 8|? Bin dem Problem konkret noch nicht begegnet, aber das finde ich schon wirklich unschön. Und ich denke let löst dieses Problem nicht oder?

Tobiking

1x Rätselkönig

  • Private Nachricht senden

16

04.08.2016, 16:25

Was ich eher meine sind, dass wenn man mehrere libs hat, immer den globalen Raum belegt, weil es keine namespaces gibt, das muss man immer aufpassen. Teilweise hat man dann ja das Problem, dass bei Einbindung von einer lib der rest der Anwendung nicht mehr geht 8|? Bin dem Problem konkret noch nicht begegnet, aber das finde ich schon wirklich unschön. Und ich denke let löst dieses Problem nicht oder?

Damit hat let nichts zu tun. Da hast du Recht. Aber die Lösung dafür ist mit dem Modul-Konzept auch spezifiziert (http://www.2ality.com/2014/09/es6-modules-final.html). Da gibt es aber bisher noch gar keine Implementierung für Browser.

Was DeKugelschieber schreibt ist aber auch eine Möglichkeit. In Typescript (was ich persönlich bevorzuge) sind die neuen Features auch schon eingeflossen. Und am Ende kommt ES5 raus, was jeder Browser kann.

17

05.08.2016, 10:23

Also ich bin in meinem Buch bis Objekte gekommen und habe nun Folgenden Ansatz:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
var spieler = {
    name : "spieler1",
    waffe : "axt",
    schaden : 10,
    leben : 150 
}

var monster = {
    name : "kristallgolem",
    waffe : "klauen",
    schaden : 3,
    leben : 80
}


das wären 2 Objekte vom Typ Spieler und Monster. Die Basiswerte Leben und Schaden sind fest vergeben.
Nun die neueren Ansätze:
Es gibt eine Funktion "Erscheinen" die abfragt, on eine Taste gedrückt wird und beim Drücken der Taste erscheint das Bild des Monsters.
Bei Mausklick wird dann eine Funktion "Angreifen" gestartet, die im Sekundentakt (Geschwidnigkeitsbegrenzung) dem Monster immer 10 Schaden zufügt.
Eine Lebensleiste die sich verringert wirde später noch hinzugefügt hat aber jetzt erstmal keine Bedeutung.
Würde das so funktionieren?
Ich habe leider keinen Ansatz, wie ich Bilder mit den Objekten verknüpfe oder ob ich da zu kompliziert denke. Denn ich wette, dass im meinem Javascriptbuch die Lösung dafür nicht vorhandne ist^^

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

18

05.08.2016, 11:10

Würde das so funktionieren?

Am besten ist du probierst es aus. Durch vorsagen lernst du nichts. Durchs Erfahrungen sammeln jedoch schon. Es sind vor allem recht wenig Informationen. Wir könnten dir jetzt vorkauen was du machen könntest. Das ist aber nicht so sinnvoll wie das was du dir selbst aus denkst um ans Ziel zu kommen. Unsere Ideen entsprechen nicht deiner aktuellen Denkweise und so probierst du es am besten selbst. Wenn du dabei konkrete Probleme bekommst kannst du gern fragen. Aber solange du selbst Ideen hast wie etwas funktionieren könnte solltest du immer erst selbst probieren.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

19

05.08.2016, 12:30

das wären 2 Objekte vom Typ Spieler und Monster. Die Basiswerte Leben und Schaden sind fest vergeben.
Nein, das sind 2 Objekte, die jeweils in den Variablen spieler und monster abgelegt werden.

Bedenke: Objekte können auch komplexere Werte beinhalten:

Quellcode

1
2
3
4
5
6
7
{
  "attack": function(target) {
    // ...
  },
  "sprite": new Image("[...]"),
  // ...
}
Probier einfach aus, was alles möglich ist, oder schlag es online nach.

Wie du die Bilder speichern könntest, hängt auch davon ab, wie du sie später verwendest. In dem Beispiel oben könnte die URL oder data-URL dem Image-Konstruktor übergeben werden, wodurch du nicht nur das Bild lädst, sondern direkt ein entsprechendes DOM-Element hast (es gibt entsprechende Events, ob das Bild geladen wurde oder ob es Fehler gab), du könntest aber auch nur die URL als Zeichenkette speichern.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

20

05.08.2016, 13:52

So hast du nur zwei Variablen. Willst du mehr Monster haben würdest du ständig eigene Objekte erzeugen, quasi ohne "Klasse".

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// Konstruktor
function Monster(schaden, leben){
    this._schaden = schaden; // Konvention: durch den Unterstrich ist die Variable "private"
    this._leben = leben;
}

// Eine Methode.
Monster.prototype.lebenVerringern = function(hp){
    this._leben -= hp;
}

Monster.prototype.istAmLeben = function(){
    return this._leben > 0;
}

// so jetzt kann man daraus eine Instanz erstellen
var monster = new Monster(10, 100);


Dadurch, dass die Methoden am prototype der Funktion angehangen werden, werden keine Kopien bei der Instanzierung der Klasse erstellt, sondern immer die selben Methoden genutzt (mit verschiedenen Daten). Die Attribute der Klasse kommen einfach durch das this.Name zustande. In der JS Welt hat sich der Unterstrich als Konvention durchgesetzt um Variablen als private zu kennzeichnen.

Daran siehst du auch warum dein Beispiel funktioniert. Es wird eben genau auf die Werte der Instanz zugegriffen.

Ich hab ein ganzes Framework und Spiel in JS geschrieben: Multiplayer Spiel, Framework. Das kannst du dir mal ansehen, jedoch würde ich heute evt. wieder einiges anders machen.

Werbeanzeige