Czego potrzebuje, aby stworzyć przeglądarkową grę multiplayer - Angular 7 + API

0

Witam.
Czy ktoś się orientuje i jest w stanie mnie nakierować czego potrzebuje, aby taką grę stworzyć? Jest potrzebne API? Są jakieś biblioteki, które mi to ułatwią? Np.
PhaserIO
SocketIO

5

Phaser to całkiem dobry silnik 2D, pracuje i na Canvasie, i na WebGL, jest dobrze przemyślany, całkiem szybki i ma praktycznie wszystkie ważne funkcje. Śmiga pod nim zarówno Spine jak i Spriter. Najlepiej poczytać dobrze example i dokumentację przed wzięciem się za dev. Phaser narzuca sposób pisania gry (strukturę kodu: GameState'y, zarządzanie assetami) i jest rozwiązaniem kompleksowym (audio, animacje, biblioteki typu spine etc.)

Inne możliwości na "klienta" (apkę chodzącą w przeglądarce):

  • Unity - można kompilować gry stworzone w Unity pod weba i śmiga to z tego co wiem coraz lepiej
  • PIXI - silnik renderujący, Phaser na nim się opiera
  • Babylon.js - silnik gier 3D
  • Web Assembly - gdybyś potrzebował native performance (technologia na wczesnym etapie rozwoju)

Angular to framework do aplikacji webowych typu single-page-application/SPA (podstrony są generowane "w locie" przez JS) - jeśli chcesz stworzyć grę typu OGame na tabelkach etc, to ok, możesz się zdać na Angulara, ale pewnie chodzi Ci o coś bardziej dynamicznego :) Angular ewentualnie może być dobrym rozwiązaniem do stworzenia panelu administracyjnego np. bardziej rozbudowanej gry online. Lepiej zastosować coś prostszego, bo główną część gry stanowić będzie po prostu canvas z wyświetlaną grafiką. Myślę że vanilla JS albo jQuery do podstawowych operacji na DOM w zupełności wystarczy.

Co do backendu opcji jest sporo, zależy jakiego typu grę chcesz zrobić:

  • gra typu OGame, Farmville itp. - można to nawet postawić na starym dobrym PHP jako API, ale jeśli masz zacząć zgłębiać nową wiedzę to lepiej wejść w świat node.js/express.js i robić to z myślą o przyszłości. Inne sensowne opcje: Python, Ruby
  • gra online nie wymagająca niskich lagów - ostatnio popularny node.js z komunikacją po websocket'cie jak najbardziej na plus, można się zastanowić nad rozwiązaniem serverless w ramach Firebase (synchro po bazie danych, trzeba jednak uważać żeby nie przekroczyć darmowych quota), w zasadzie Firebase to dobre rozwiązanie też dla gier z pierwszego punktu, dostępnego jako API (autentykacja w chmurze, logika w formie Funkcji).
  • gra wymagająca niskich lagów (realtime) - najlepiej spisuje się szybki serwer napisany w językach zapewniających wysoką wydajność wykonywania kodu, jak C++ albo nieco wolniejsze C#/JAVA/Go. Ogólnie synchronizacja w realtime to gruby temat, jest sporo patentów i różnych podejść (serwer hostem vs jeden z graczy hostem albo sposoby aproksymacji ramek); inaczej się synchronizuje mecz FPP, inaczej bitwę RTS, inaczej MMO; jest też sporo gotowych rozwiązań ("wbudowane" synchro w ramach Unity etc.), ale sam nie stosowałem - może ktoś inny się wypowie

Osobna sprawa - baza danych: MySQL/PostgreSQL vs. no-SQL (MongoDB/cloud). Wszystko zależy od możliwości, wiedzy i preferencji.

Powodzenia

0

Wow, super odpowiedź 😀
Ogólnie projekt jest raczej prosty. Na początek chciałbym zrobić kółko i krzyżyk gdzie można grać we dwójkę. Proste grafiki, żadnych głupot 3d, prosta tablica. Ogólnie planuje bardzo podobną grę, z rysowaniem przez gracza.

A taka sprawa jak odświeżanie strony? Gra działa na JS, każde odświeżenie spowoduje zerowanie obiektów. Przejmować się czymś takim?

2

Odświeżanie strony - na kliencie trzeba pamiętać "id" gracza, za pomocą cookies lub localStorage (to drugie to nowszy feature JSa). Serwer powinien nadawać przy pierwszym połączeniu unikalne id każdemu z klientów (i przesyłać je w odpowiedzi do klienta) i to id powinno zostać zapamiętane na kliencie do ponownego użycia po przeładowaniu. Przy następnym połączeniu id powinno zostać odczytane z localStorage/cookie i w pierwszym komunikacie na serwer użyte do inicjalizacji połączenia. Wtedy serwer wie, że ma do czynienia z już "zarejestrowanym" graczem i może pobrać jego zapisane wcześniej dane np. jego statystyki, imię, rozegrane gry, aktualną grę i przywrócić stan gry... To jest taka podstawa podstaw jeśli chodzi o zachowanie się serwera/klienta (inicjalizacja połączenia i komunikacji)

Ciekawy artykuł (po ang.): http://buildnewgames.com/real-time-multiplayer/ - jest tam taki wykres, na którym rozrysowane jest jak wygląda komunikacja w czasie (w tym zapamiętanie "client id")

Powodzenia!

1 użytkowników online, w tym zalogowanych: 0, gości: 1