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

21.02.2015, 12:34

2D Multiplayer Kamera und maximale Spielerentfernung

33%

freier Splitscreen pro Spieler (2)

33%

gemeinsame Kamera (mit maximaler Spielerentfernung) (2)

33%

einzelne Kamera auf einen Spieler (weit entfernte Spieler über Minimap sichtbar) (2)

Hi, ich experimentiere im Moment mit einem anderen Kamera-Ansatz herum, den ich bisher häufiger mal angetroffen habe: Mehrere Spieler teilen sich eine Kamera, diese wird bewegt und gezoomt, so dass alle Spieler sichtbar sind. Allerdings ergeben sich dabei ziemlich absurde Szenarien. Ich habe mal ein paar Screenshots angehangen.
Mein Problem ist, dass sich Spieler prinzipiell beliebig weit von einander entfernen könnten. Bis zu einem gewissen Grad macht das auch Sinn - danach wird es nur noch absurd, weil die Kamera zu weit wegzoomen muss. Daher überlege ich wie ich den maximalen Spieler-Abstand am besten kontrolliere.

Die bisherige Idee: Wenn sich ein Spieler bewegen will wird geprüft, ob sein neuer Abstand zu den anderen Spielern noch erlaubt ist (quasi float const MAX_PLAYER_DISTANCE). Den Ansatz gibt es ja in verschiedenen Spielen. Allerdings sehe ich da ein Problem: Manchmal habe ich es (bei anderen Spielen) aber erlebt, dass man sich dann nicht mehr wegbewegen konnte. Beispiel mit drei Spieler: Spieler 1 bleibt stehen, 2 und 3 gehen hinter eine Wand (das ganze Szenario ist auch nochmal im Anhang). Danach geht Spieler 3 zurück zu 1. Das ganze Szenario spielt sich knapp am Rand der maximalen Entfernung ab. Dann geht die 3 entgegengesetzt zur 2 weg bis die maximale Distanz erreicht ist. Anschließend kann sich 2 nicht mehr bewegen ohne, dass 3 zurück kommt :S

Habt ihr eine Idee wie ich den Ansatz mit der Entfernungslimitierung umsetzen kann ohne dieses Problem zu erzeugen?

LG Glocke

/EDIT: Die einzige Möglichkeit die mir einfällt ist, statt der Distanz via Luftlinie die Distanz via Pathfinding zu nehmen.

/EDIT: Umfrage eingefügt
»Glocke« hat folgende Bilder angehängt:
  • cam_problem.jpg
  • absurd.jpg
  • edgecase.jpg
  • typical.jpg

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »Glocke« (22.02.2015, 15:18)


DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

2

21.02.2015, 12:55

Ich glaube die Lego Spiele hatten ein System bei dem erst gezoomed wird, wenn das dann den Maximalpunkt erreicht wurde gesplittet.

3

21.02.2015, 13:00

Mhm, seltsamer Ansatz. Ich kenne nur Spiele, bei denen die Kamera auf einen Spieler fokussiert ist und die anderen Spieler gezeichnet werden, aber auch außerhalb des sichtbereichs der Kamera sein können. Wie es nunmal bei den typischen mmo s ist (Lol, dungeon siege,...).
Hast du Beispiele von Spielen, die diese Idee umsetzen?

Ansonsten: warum sollte der grüne nicht mehr laufen können? Wenn er zu den anderen läuft, muss die Kamera ja ranzoomen. Wenn er sich von den anderen entfernen würde, würde die Kamera blocken, weil die maximale zoomstufe erreicht ist. Wenn es ein single-player ist, sollen die Spieler evtl. auch im Team / in irgendeiner formation laufen. Dann müsstest du mit einplanen, dass sich die Kamera möglicherweise mit dem Team mitbewegt.

Als Distanz bleibt die Distanz, die vom Spieler (der Typ vor dem bildschirm) wahrgenommen wird. Also luftlinie.
EnvisionGame(); EnableGame(); AchieveGame(); - Visionen kann man viele haben. Sie umzusetzen und auf das Ergebnis stolz zu sein ist die eigentliche Kunst.

4

21.02.2015, 13:11

Ich hätte hier spontan auch mal auf die Legoreihe verwiesen, die das mit einem Mix gelöst haben:
https://www.youtube.com/watch?v=yr0LLWkPwl8#t=760

Allgemein würde ich sagen, dass die Kameraführung zum Spiel passen sollte, falls es für die Spieler von Vorteil ist, wenn immer alle Spielfiguren nahe beieinander sind, dann würde die oben erwähnte Blockade die Spieler dazu zwingen, wieder näher zusammen zu stehen.

Generell sollte die Kamera aber die Spieler nicht zu sehr in ihrer Freiheit einschränken, sonst baut sich da eher Frust auf...

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

5

21.02.2015, 13:15

Ansonsten: warum sollte der grüne nicht mehr laufen können?
Weil da eine Wand ist und er um rundrum zu laufen sich zunächst weiter entfernen müsste?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

6

21.02.2015, 14:06

Ansonsten: warum sollte der grüne nicht mehr laufen können?
Weil da eine Wand ist und er um rundrum zu laufen sich zunächst weiter entfernen müsste?

Genau so sieht es aus!

Generell sollte die Kamera aber die Spieler nicht zu sehr in ihrer Freiheit einschränken, sonst baut sich da eher Frust auf...

Da gebe ich dir definitiv recht!

Ich hätte hier spontan auch mal auf die Legoreihe verwiesen, die das mit einem Mix gelöst haben

Der Ansatz sieht echt interessant aus! :search:

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

7

21.02.2015, 14:09

Es gibt noch den Ansatz des "Teleportierens". Sprich sobald sich die Spieler zuweit voneinander entfernen, wird ein Spieler zum anderen versetzt. Nicht gerade elegant, aber schnell implementiert.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

8

21.02.2015, 16:19

Es gibt noch den Ansatz des "Teleportierens". Sprich sobald sich die Spieler zuweit voneinander entfernen, wird ein Spieler zum anderen versetzt. Nicht gerade elegant, aber schnell implementiert.

Richtig "verpackt" vllt. gar nicht so schlecht... Aber für meinen konkreten Anwendungsfall leider nicht so sinnvoll..

Zur Idee mit dem Hybrid aus Shared- und Split-Screen: Bei zwei Spielern ist das vermutlich relativ einfach - auch wenn man die Möglichkeiten der Aufteilung (wie im verlinkten Video der Lego-Spiele gezeigt) in Betracht zieht. Ich versuch mir das ganze gerade für drei, vier oder mehr Spieler vorzustellen ... ein ständiges Gewechsel zwischen einer und n Kameras, wobei sich mehrere Spieler manchmal eine Kamera teilen. Spätestens wenn der dritte Spieler rechts "aus dem Bild" läuft, seine eigene Kamera bekommt, und dann nach unten und weit nach links läuft (ohne seine eigene Kamera zu verlieren), dann würden die Kameras u.U. getauscht werden - damit der Spieler der am weitesten links ist auch die Kamera hat, die am weitesten links ist usw. Ich glaube bei mehr als drei Spielern wird das ein ziemliches wirr-warr ;(

Was wäre, wenn man als Kriterium der Distanz statt der größten Luftlinie zwischen zwei Spieler den längsten kürzesten Pfad nimmt (ok das klingt verwirrend ^^). Also konkret: Zwischen allen Spielern (1-2, 1-3, 1-4, 2-3, 2-4, 3-4 im Falle von vier Spielern) den kürzesten Pfad berechnen und für diese Pfadlängen das Maximum wählen - und mit dem maximalen Abstand vergleichen. Dann darf der blaue Spieler (siehe Beispiel oben) gar nicht so weit gehen, weil der Pfad zum weitesten entfernten Spieler (grün, der hinter der Wand sitzt), die maximale Entfernung überschreiten würde. Andersrum: Grün hat dann immer noch eine Chance sich zu bewegen - weil ein Pfad zu einem der anderen Spieler existiert, so dass die "Grenzsituation" entschärft werden kann.
»Glocke« hat folgendes Bild angehängt:
  • kamera_ansatz.jpg

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »Glocke« (21.02.2015, 16:36) aus folgendem Grund: Bild zur Visualisierung angehangen


Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

9

21.02.2015, 17:17

Wenn du eine Art Schnecke hast in die sich ein Spieler hineinbewegt so ist der Weg zwischen den beiden vielleicht groß, räumlich gesehen sind sie aber nah beieinander. Jetzt dürfen die Spieler nicht weiter gehen obwohl sie locker auf den Bildschirm passen. Das vor allem dem Spieler logisch zu verkaufen damit er sich nicht wundert und fragt warum das Spiel grad so rum bugt sollte nicht ganz so einfach sein. Andererseits stellt sich die Frage ob du grad nur überlegst wie man es dann lösen könnte oder das wirklich ein konkretes Problem ist? Spielen 4 Spieler und mehr gleichzeitig an einem Bildschirm?
Wenn ja könnte man sich fragen wie die Level aufgebaut sind. Wenn ein Level eher aus abgeschlossenen Räumen besteht die miteinander verbunden sind so könntest du die Bewegung auf diese Räume beschränken. Möchte ein Spieler durch die Tür zum nächsten Raum so muss er darauf warten dass die anderen nah genug sind, bzw die anderen teleportieren sich möglicherweise nach. Statt Räumen können das natürlich auch kleinere abgeschlossene Gebiete sein die möglichst von der Kamera gesamt erfasst werden können.
„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.“

10

21.02.2015, 18:08

Wenn du eine Art Schnecke hast in die sich ein Spieler hineinbewegt so ist der Weg zwischen den beiden vielleicht groß, räumlich gesehen sind sie aber nah beieinander. Jetzt dürfen die Spieler nicht weiter gehen obwohl sie locker auf den Bildschirm passen. Das vor allem dem Spieler logisch zu verkaufen damit er sich nicht wundert und fragt warum das Spiel grad so rum bugt sollte nicht ganz so einfach sein.

Sehr guter Punkt!

Wenn ja könnte man sich fragen wie die Level aufgebaut sind. Wenn ein Level eher aus abgeschlossenen Räumen besteht die miteinander verbunden sind so könntest du die Bewegung auf diese Räume beschränken. Möchte ein Spieler durch die Tür zum nächsten Raum so muss er darauf warten dass die anderen nah genug sind, bzw die anderen teleportieren sich möglicherweise nach. Statt Räumen können das natürlich auch kleinere abgeschlossene Gebiete sein die möglichst von der Kamera gesamt erfasst werden können.

Das mit den Räumen trifft es ganz gut. Mein Ziel ist es, die Spieler durch ein zufallsgeneriertes Dungeon streifen zu lassen (einen Prototyp für zufällige Räume und Gänge habe ich schon). Allerdings möchte ich nicht den ganzen Raum mit der Kamera erfassen. Auch der Ansatz mit "an der Tür warten" gefällt mir nicht ganz so sehr.. Soll ein Spieler Gegner über einen Gang oder aus einem Nachbarraum anlocken und die anderen warten im "Vorzimmer" (um irgendwelche strategischen Vorteile zu haben), wäre das etwas zu einengend.

Allerdings habe ich nie eine Art "Schnecke" (zumindest nicht im Kleinen): Die Räume und Gänge verlaufen streng orthogonal (d.h. nicht gedreht etc.) und Räume sind nicht ineinander verschachtelt. Kurz: Die Spielwelt ist wie bei klassischen Rogue-likes aufgebaut.

LG

/EDIT: Das ganze kann man sich so vorstellen, nur dass die Spieler i.d.R. nicht ganz so weit verstreut sind.

(Link)

Werbeanzeige