Das Problem mit den Spielern und dem Senden von Daten kannst du Lösen indem du deine Welt in Bereiche einteilst. Immer wenn sich ein Spieler bewegt wird danach geprüft, ob er im selben Bereich bleibt oder einen neuen Betritt. Diese Bereiche werden auch im Code als eigene Liste oder Array behandelt. Diese kannst du dir dann zurückgeben lassen. Quasi Bereich::GibtAlleSpielerDiesesBereichs. Du Schickst dann jedem Spieler nur die Koordinaten der Spieler die im selben Bereich sind. Dein Kollisionsproblem ist auch relativ simpel zu Lösen. Du solltest das nicht Pixel für Pixel lösen, sondern Tile für Tile. Du hast ja dein Array mit Tiles. Tile[5][5] ist ein Baum mit Kollision(das 5te Tile von links und das 5te von oben). Die Tiles haben feste Länge(von mir aus 32x32 Pixel) beim Zeichnen kannst du nun einfach multiplizieren. Heisst Tile[5][5] wird nicht an Position[5][5] gezeichnet, sondern an Position[5*32][5*32]. Die Kollision kannst du Abfragen, indem du nun einfach überprüfst auf welchen Tiles sich dein Spieler befindet. Befindet er sich Teilweise(
) auf Tile[5][5] dann ist eine Kollision da. Hoffe ich konnte es einigermaßen erklären
Du kannst für die Spielerpositionen natürlich auch einfach Gleitkommawerte benutzen. Wie du es löst ist relativ egal. Aber ich denke eine Pixelgenaue Kollision ist für dein Problem quatsch und wenn du schon TileMaps benutzt, bietet sich eine Tilekollision ja auch an
An deiner Stelle würde ich auch nicht unbedingt zu c++ für den Server greifen. Wenn du dort noch keine Programmierkenntnisse besitzt, wird das zu lange dauern
Ich würde auch bei php bleiben. Sollte für das Problem reichen. Ansonsten Java oder so benutzen, da es schneller zu lernen ist und im Vergleich auch immer noch über genug Performance verfügt
Grüße