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

1

16.02.2018, 08:59

Mehrere Probleme mit Phaser-Project

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

2

17.02.2018, 10:50

Willkommen im Forum, XArnonX! ;)
Sonst heißt's hier immer, wir brauchen mehr Infos.
In deinem Fall (imho) zu viel des Guten!
Hoffe, du findest trotzdem jemanden, der sich das mal anschaut. ;)
fka tm

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

3

17.02.2018, 14:27

Hey :)
Machen wir es doch mal einfacher. Pick dir mal ein kleines Problem raus mit welchem du anfangen möchtest. Dann gucken wir mal.
„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.“

4

17.02.2018, 20:28

Willkommen im Forum, XArnonX! ;)
Sonst heißt's hier immer, wir brauchen mehr Infos.
In deinem Fall (imho) zu viel des Guten!
Hoffe, du findest trotzdem jemanden, der sich das mal anschaut. ;)


Naja, ich habe das alles so geschrieben, das ich dies im Anschluss in Englisch übersetzen und gleich darauf auch das Forum der Phaser-Community loslassen kann XD. Lieber den Leuten erst mal zu viel geben, als später nicht richtig weiterzukommen da die anderen nicht wissen, was man eigentlich möchte.


Hey :)
Machen wir es doch mal einfacher. Pick dir mal ein kleines Problem raus mit welchem du anfangen möchtest. Dann gucken wir mal.


Also, praktisch habe ich schon bei den ersten 3 Problemen einiges ausprobiert und nachgefragt(Phaser-Discord, Freund gemailt). Das für mich im Moment wichtigste Problem ist das 2te. Ich denke es wäre am besten wenn die Steuerung der Sammelobjekte und des Ausgangs in einer .js wären (funktionieren ja relativ ähnlich). Direkt im Anschluss würde ich mich gerne um das Problem um die Arcade.Physics kümmmern.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

5

18.02.2018, 13:04

Also, praktisch habe ich schon bei den ersten 3 Problemen einiges ausprobiert und nachgefragt(Phaser-Discord, Freund gemailt). Das für mich im Moment wichtigste Problem ist das 2te. Ich denke es wäre am besten wenn die Steuerung der Sammelobjekte und des Ausgangs in einer .js wären (funktionieren ja relativ ähnlich). Direkt im Anschluss würde ich mich gerne um das Problem um die Arcade.Physics kümmmern.

Dann beschreibe das eigentliche Problem bitte noch mal. Mir ist das aus dem obigen Text nicht ganz klar.
„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.“

6

18.02.2018, 19:16

Also, praktisch habe ich schon bei den ersten 3 Problemen einiges ausprobiert und nachgefragt(Phaser-Discord, Freund gemailt). Das für mich im Moment wichtigste Problem ist das 2te. Ich denke es wäre am besten wenn die Steuerung der Sammelobjekte und des Ausgangs in einer .js wären (funktionieren ja relativ ähnlich). Direkt im Anschluss würde ich mich gerne um das Problem um die Arcade.Physics kümmmern.

Dann beschreibe das eigentliche Problem bitte noch mal. Mir ist das aus dem obigen Text nicht ganz klar.


Ich weiß nicht, wie ich in dem Beispiel die Sammelobjekte und den Ausgang als interagierbare Spielobjekte (overlap) gebündelt in einer .js in das Spiel bringen kann, ohne die Position vorab in der json festzulegen (soll ja später zufallsbasiert platziert werden). Also wie es der Spieler ursprünglich wurde ( _player.init({x: 1, y: 1})) nur mit dem Ausgang über eine _Ausgang.init({x:TileX, y:TileY} und die Sammelobjekte eventuell als Array (mittels _Sammelobjekte({x1:TileX, y1:TileY},{x2:TileX, y2:TileY},{x3:TileX, y3:TileY},...) ).

Hier ist zusätzlich der Link zu meinem Thread im Phaser-Forum.

Ordner mit kompletten zurzeitigen Status ist angehangen.

Nochmals Danke für eure Hilfe
Gruß
XArnonX
»XArnonX« hat folgende Datei angehängt:

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »XArnonX« (19.02.2018, 08:11) aus folgendem Grund: Angleichung mit Post bei Phaser-Forum: Upload des gesamten Arbeitsordners


Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

7

19.02.2018, 16:37

Das als JSON auszulagern ist ja erst mal kein muss. Vielleicht ist es hilfreich wenn du zuerst mal ein eigenes Projekt mit Phaser machst, ohne dir solche Vorlagen zu nehmen. Du scheinst ja jetzt zu versuchen etwas fertiges auf dein Problem umbrechen zu wollen. Das ist nicht unbedingt einfach, vor allem wenn man keine Ahnung vom Framework hat.
Aber unabhängig davon. Du kannst ja erst mal eine Position in JSON festlegen und die nach der Instanziierung anpassen. Da spricht ja erst mal nichts gegen, oder?
„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.“

Werbeanzeige