Hallo an alle,
ich stecke gerade mit meinem Phaser-Projekt in einer ziemlichen Sackgasse und würde dringend Hilfe gebrauchen.
Über mein Projekt:
Es ist ein Top-Down-Spiel, in der man mit der Spielfigur 8 Sammelobjekte in einer zufällig vorgegeben Reihenfolge einsammeln und danach zum Ausgang gehen soll. Berührt die Spielfigur das aktuell geforderte Objekt, verschwindet es und das nächste Objekt wird vom Spiel ausgewählt. Berührt die Spielfigur ein aktuell nicht gefordertes Objekt oder den Ausgang vor dem Einsammeln aller Sammelobjekte passiert keine Reaktion darauf.
Das Spielfeld ist 11x11 Felder groß und hat eine Umrandung aus Wandblöcken mit 16 freistehenden Blöcken in der Mitte. Die Spielobjekte (Spieler, Sammelobjekte, Ausgang) werden zufällig auf den freien Feldern platziert, die Bewegung des Spielers ist von Kachel zu Kachel. Die Kacheln und Spielobjekte haben eine Größe von je 100x100 px.
Thematisches Spielziel ist so schnell wie möglich die Angriffe des Gegners abzuwehren (Überlaufen des entsprechenden Symbols) und zuletzt das Spielfeld durch den Ausgang zu verlassen.
Später soll noch ein UI mit Menü (beinhaltet Timer und Pause-Funktion) unter dem Spielfeld dazukommen, ist aber vorerst nicht Teil meiner Probleme.
Als Vorlage habe ich
https://github.com/jansensan/test-phaser…-based-movement genutzt. Hauptgrund war, dass dort die Bewegung von Kachel zu Kachel mit der bereits vorhanden Spieler-js am besten geklappt hatte.
Was habe ich bisher erfolgreich daran verändert:
Ich habe den NPC aus dem Beispiel entfernt und konnte das Spielfeld auf meine Bedürfnisse verändern und auch die Pixelgrößen entsprechend anpassen. Ebenfalls habe ich einen Weg gefunden, ein einzelnes weiteres Spielobjekt (Ausgang) in das Spielfeld einfügen zu können (jedoch ohne Interaktionsmöglichkeiten). Alle benötigten Platzhalter-Grafiken (Spritesheets, Tilesets, Bilder) sind in der richtigen Größe fertiggestellt.
Aktuelle Zielsetzung für Projekt (Zwischenstand):
Alle Objekte werden auf festgelegten Positionen platziert, Spieler sammelt Sammelobjekte in einer vorgegeben Reihenfolge (1-8 ) ein und geht danach zum Ausgang.
Wo habe ich die genauen Probleme und was habe ich bereits deswegen versucht:
1. In der Darstellung: Das Spiel wird auf meinem Bildschirm (2160x1440) unten abgehackt dargestellt. Kann es nur bei einem Zoom von etwa 70% komplett sehen.
Ich habe auch schon Versuche unternommen, mit
_game.scale.scaleMode = Phaser.ScaleManager.SHOW_ALL zu arbeiten, ohne Erfolg leider. Hatte diese in der game.js sowohl in der
initPhaser- als auch in der
create-function eingesetzt. Generell geht es, bei einem Test mit dem Pacman/Car-Beispiel von Phaser hatte alles mit denselben Werten funktioniert.
2. Ich weiß nicht, wie ich innerhalb der Vorlage meine verschiedenen Spielobjekte als Gruppe agieren lassen und platzieren kann (vorerst mit vorgegebenen Positionen). Mein Problem darin ist, dass ich teilweise den Code des Beispieles nicht richtig verstehe und bei meinen vorherigen Projekten die Objekte mit Referenzen aus
json-Dateien durch einen Objekt-Layer platziert habe. Deswegen habe ich eine zusätzliche
Spielobjekte.json geschrieben, worin alle Spielobjekte (außer der Spielfigur) zusammengefasst sind.
3. Interaktion des Spielers mit Objekten: Aktivierung der benötigten
Arcade.Physics sowie der Zuweisung an Spielobjekte klappt nicht richtig. Hatte bereits versucht, in der
Init-function der
player.js und
ausgang.js etwas entsprechendes einzusetzen, nur Fehlermeldungen als Ergebnis. Wird aber benötigt, damit ich
game.physics.arcade.overlap für die Interaktion zwischen den Objekten nutzen kann.
Den Vergleich ob die Reihenfolge stimmt, kann ich später mit
if(Sammelstatus== SammelID) erledigen.
Weiter entfernte Probleme und Ideen:
4. Zufällige Reihenfolge beim Aufsammeln: Meine Idee in der Richtung wäre, die IDs der Angriffe in ein Array zu legen, aus der mittels
removeRandomItem jeweils zufällig ein Wert herausgenommen wird und dann verglichen wird
if(AngriffID== SammelID). Wird
null als
AngriffID aus dem Array herausgegeben, kann man den Ausgang benutzen.
5. Zufällige Platzierung der Spielobjekte: Da würde ich mit
SafeTile arbeiten, die ich in der
map.js definiere und dem
collision-layer der
map.json entnehme. Der Weg wäre, „nimm 10 zufällige
SafeTile-Werte und weise den Spielobjekten jeweils 1 Wert zu“. Ich sehe auch einige Probleme darin, dass ich mich persönlich mit dem Thema Arrays noch nicht so gut auskenne.
Pastebin-Links zu meinen Dateien (zurzeitiger Status, sind aufgrund der Versuche auch teilweise mit unbenötigten Code)
index.html:
https://pastebin.com/AH1GdbD8
game.js:
https://pastebin.com/VPbaEfRn
map.js:
https://pastebin.com/JSKtuvDc
abstract-image.js:
https://pastebin.com/PCjJddi7
abstract-sprite.js:
https://pastebin.com/L7Ku8ZZk
ausgang.js:
https://pastebin.com/8WTN3rUS
player.js:
https://pastebin.com/hwCSnpZu
Sammelobjekte.js:
https://pastebin.com/4mjPsfvE
image-constants.js:
https://pastebin.com/e4wmgxB3
sprite-constants.js:
https://pastebin.com/nrEb50Ss
map.json:
https://pastebin.com/KqGsmFRJ
Spielobjekte.json:
https://pastebin.com/y05YDPWW
Danke an alle für die Hilfe.
XArnonX