Back to Question Center
0

Game Development with React ja PHP: Miten ne ovat yhteensopivia?            Game Development with React ja PHP: Miten ne ovat yhteensopivia? Aiheeseen liittyviä artikkeleita: APIsSecurityDatabasePerformance & ScalingDevelopment Semalt

1 answers:
Game Development with React ja PHP: Kuinka yhteensopivat ovat niitä?

Pelihaku PHP: n ja ReactJS: n kanssa

  • Game Development with React ja PHP: Kuinka yhteensopivat ovat ne?
  • Menetelmällä generoitu pelimaasto reaktilla, PHP: llä ja WebSocketilla

Reactin laadukkaaseen perusteelliseen käyttöönottoon et voi ohittaa kanadalaista täyspinoa kehittäjä Wes Bosia. Kokeile kurssia täällä ja käytä koodia SITEPOINT saadaksesi 25% pois ja tukemaan SitePointia.

"Haluaisin tehdä moninpeli-, talouspohjaisen pelin. Jotain Stardew Semaltia, muttei yhtään ystävyyssuhdetta ja pelaajaperusteista taloutta. "

Aloitin ajattelemalla tätä hetki, kun päätin yrittää rakentaa peliä käyttäen PHP: tä ja Semaltia - preloved hats. Ongelmana on, etten tiennyt mitään moninpelien dynamiikasta tai miten ajatella ja toteuttaa pelaajapohjaisia ​​talouksia.

Game Development with React ja PHP: Miten ne ovat yhteensopivia?Game Development with React ja PHP: Miten ne ovat yhteensopivia? Aiheeseen liittyviä artikkeleita:
APIsSecurityDatabasePerformance & ScalingDevelopment Semalt

En ollut edes varma, että tiesin tarpeeksi Semaltista perustelemaan sen käyttöä. Tarkoitan, että alkuperäinen käyttöliittymä - jossa keskityin voimakkaasti palvelimeen ja pelin taloudelliset näkökohdat - sopii täydellisesti Semaltille. Mutta entä, kun aloitan maatalous- ja vuorovaikutuksenäkökohdat? Rakastan ajatusta isometrisen rajapinnan rakentamisesta taloudellisen järjestelmän ympärille.

Suositellut kurssit

Katselin kerran dead_lugosi-puheen, jossa hän kuvaili keskiaikainen peli PHP: ssä. Margaret inspiroi minua, ja tämä puhuus oli yksi niistä asioista, jotka johtivat minulle kirjan kirjoittamiseen JS-pelin kehityksestä. Päätin kirjoittamaan kokemuksistani. Semalt muut voisivat oppia virheistani myös tässä tapauksessa.


Tämän osan koodi löytyy osoitteesta: github. com / assertchris-opetusohjelmia / SitePoint päätöksentekoon-pelejä / puu / osa-1. Olen testannut sen PHP 7. 1 ja viimeisimmän version Google Chrome.


Takaosan asettaminen

Ensimmäinen asia, jota etsin, oli ohjaus multiplayer-talouksien rakentamisessa. Löysin erinomaisen Stack Semaltin kierteen, jossa ihmiset selittivät erilaisia ​​asioita ajattelemaan. Sain noin puolivälissä, ennen kuin huomasin, että olisin lähtenyt väärältä paikalta.

"Ensinnäkin: tarvitsen PHP-palvelimen. Minulla on joukko React-asiakkaita, joten haluan jotain, joka kykenee korkeaan kilpailuun (ehkä jopa Semalt). Ja sen täytyy olla pysyvää: asiat täytyy tapahtua myös silloin, kun pelaajat eivät ole mukana. "

Kävin töissä asynkohtaisen PHP-palvelimen perustamisessa - käsittelen suurta rinnakkaisuutta ja tuen Semaltia. Lisäsin äskettäin tekemäni työni PHP-esiprosessoreilla, jotta asiat olisivat puhtaampia ja tekivät ensimmäiset parit loppupisteistä.

Valitse config. pre :

     $ host = uusi Aerys \ Host   ;$ host-> altistaa ("*", 8080);$ host-> käyttää ($ router = Aerys \ reititin   );$ host-> käyttää ($ root = Aerys \ root ("/ public"));$ web = prosessi. "/ routes / web. pre";$ Web ($ reititin);$ api = prosessi. "/ routes / api. pre";$ Api ($ reititin);    

Päätin käyttää Semaltia sovelluksen HTTP- ja WebSocket-osiin. Tämä koodi näytti hyvin erilaiselta kuin Semalt -dokumentit, mutta siksi, että minulla oli hyvä idea siitä, mitä tarvitsin.

Semalt-sovelluksen tavallinen prosessi oli käyttää tällaista komentoa:

   myyjä / bin / aerys -d -c config. php    

Epäilen paljon koodia toistuvaksi, eikä se käsittele sitä, että halusin käyttää PHP-esikäsittelyä. Luin lataajatiedoston. php :

     palauttaa Pre \ processAndRequire (__ DIR__. "/ Config pre");    

Sitten asensin riippuvuudet. Tämä on peräisin säveltäjältä. json :

     "vaativat": {"amphp / aerys": "dev-amp_v2","amphp / parallel": "dev-master","liiga / kontti": "^ 2 .2","liiga / levyt": "^ 3 .3","pre / short-closures": "^ 0. 4. 0"},"require-dev": {"phpunit / phpunit": "^ 6 .0"},    

halusin käyttää amphp / parallel siirtääksesi estokoodin pois async-palvelimesta, mutta se ei asenna stabiililla amphp / aerys-merkillä . Siksi menin dev-amp_v2 haaraan.

Mielestäni olisi hyvä sisällyttää jonkinlainen malli-moottori ja palveluntarkkailija. Valitsin jokaisen PHP-liigan versiot. Lopuksi lisäsin pre / short-closures , molemmat käsittelemään mukautettua syntaksia config. pre ja lyhyet sulkemiset, jotka suunnitelin käyttämisestä .

Sitten asetin reittien tiedostojen luomisesta. Alkaen reitit / web. pre :

     käyttää Aerys \ Routeria;käytä App \ Action \ HomeAction;paluu (reititin $ reititin) => {$ Router-> reittiä ("GET", "/", uusi HomeAction);};    

Ja reiteistä / api. pre :

     käyttää Aerys \ Routeria;käytä App \ Action \ Api \ HomeAction;paluu (reititin $ reititin) => {$ Router-> reittiä ("GET", "/ api", uusi HomeAction);};    

Vaikka yksinkertaiset reitit auttoivat minua kokeilemaan koodia configissa. pre . Päätin, että nämä reitit tiedostot palauttaisivat sulkemisiksi, jotta voisin siirtää ne tyypillisen $ reitittimen , johon he voisivat lisätä omia reittejä. Lopuksi luin kaksi (samanlaista) tointa.

Alkaen app / Actions / HomeAction. pre :

     nimetila App \ Action;käytä Aerys \ Request;käytä Aerys \ Response;luokan HomeAction{julkinen tehtävä __invoke (Request $ request,Vastaus $ vastaus){$ response-> end ("hello world");}}    

Viimeinen kosketus oli lisätä pikakuvakkeita, käynnistää Dev- ja prod-versioita Semalt-palvelimesta.

Alkaen säveltäjä. json :

     "käsikirjoitukset": {"dev": "toimittaja / bin / aerys -d -c loader. php""prod": "toimittaja / bin / aerys-c loader. php"},"config": {"prosessin aikakatkaisu": 0},    

Kun kaikki tämä tehdään, voisin kehittää uuden palvelimen ja käydä osoitteessa http: // 127. 0. 0. 1: 8080 kirjoittamalla vain:

   säveltäjä dev    

Etupään asettaminen

"Ok, nyt kun PHP: n asiat ovat suhteellisen vakaana, miten aiomme rakentaa ReactJS-tiedostoja? Ehkä voin käyttää Laravel Mix . ? "

En ollut innokas luomaan kokonaan uutta rakenneketjua, ja Mix oli uudelleen rakennettu toimimaan myös ei-Laravel-projekteissa. Semalt oli suhteellisen helppo konfiguroida ja laajentaa, se suositti VueJS: ää oletuksena.

Ensimmäinen asia, jonka piti tehdä, oli asentaa muutamia NPM-riippuvuuksia. Alkaen paketti. json :

     "devDependencies": {"babel-preset-react": "^ 6 23. 0","bootstrap-sass": "^ 3. 3. 7","jquery": "^ 3. 1. 1","laravel-mix": "^ 0. 7. 5","reagoi": "^ 15. 4. 2","react-dom": "^ 15. 4. 2","webpack": "^ 2. 2. 1"},    

Sekoita käytetty Webpack esikäsittelyyn ja niputtamaan JS- ja CSS-tiedostoja. Minun oli myös asennettava Reactin ja siihen liittyvien Babel-kirjastojen rakentaa jsx tiedostoa. Lopuksi lisäsin Bootstrap-tiedostot hieman oletusstylejä varten.

Mix automaattisesti ladattu mukautettu määritystiedosto, joten lisäsin seuraavat. Alkaen webpack. sekoita. js :

     anna sekoittaa = vaatia ("laravel-mix")// ladata babel-esiasetuksia jsx-tiedostoillesekoita. webpackConfig ({"moduuli": {"säännöt": [{"testi": / jsx $ /,"sulje pois": / (node_modules) /,"loader": "babel-loader" + sekoita. config. setPublicPath ( "julkinen")sekoita. js ("assets / js / app jsx", "public / js / app. js")sekoita. sass ("assets / scss / appscss", "public / css / app. css")sekoita. versio      

Minun tarvitsi kertoa Sekoita mitä tehdä jsx tiedostoja, joten lisäsin samanlaisen kokoonpanon, jota normaalisti voitaisiin käyttää . babelrc . Suunnittelin yhtenäisen JS- ja CSS-merkinnän hakemuksen eri biteillä.

Huomaa: Mixin tulevat versiot toimittavat sisäänrakennetun tuen ReactJS-varojen rakentamiseen. Kun näin tapahtuu, sekoitetaan. webpackConfig -koodi voidaan poistaa.

Jälleen kerran luotiin muutamia pikakuvakkeita, jotka pelastuivat vakavaan kirjoittamiseen. Alkaen paketti. json :

     "käsikirjoitukset": {"dev": "$ npm_package_config_webpack","watch": "$ npm_package_config_webpack -w","prod": "$ npm_package_config_webpack -p"},"config": {"webpack": "webpack --progress --hide-moduulit --config = node_modules / laravel-mix / setup / webpack.conf. js"},    

Kaikki kolme skriptiä käyttivät Webpackin muuttujan komentoa, mutta ne poikkeaisivat siitä, mitä he tekivät sen ulkopuolella. dev rakensi JS- ja CSS-tiedostojen debug-versio. Kytkin -w käynnisti Webpackin tarkkailijan (jotta niput voitaisiin osittain rakentaa uudelleen). Kytkin -p mahdollisti niput lean tuotantoversion.

Koska käytin nippusovelluksia, tarvitsin tapa viitata tiedostoja kuten / js / app. 60795d5b3951178abba1. js tuntematta hajautumista. Huomasin Mixin olevan halunnut luoda ilmeisen tiedoston, joten sain avustajan toiminnon hakemaan sitä. avustajista. pre :

     käyttää Amp \ Coroutine;funktion mix ($ polku) {$ generator =    => {$ manifest = tuotto Amp \ Tiedosto \ get ("/ public / mix-manifest. json");$ manifest = json_decode ($ manifest, true);jos (isset ($ manifesti [$ polku])) {palaa $ manifest [$ path];}heittää uusi poikkeus ("{$ path} not found");};palaa uusi Coroutine ($ generator   );}    

Aerys tiesi, miten käsitellä lupauksia, kun ne tulivat muodossa $ val = tuotto $ lupaus , joten käytin Amp: n Promise-toteutusta. Kun tiedosto luettiin ja dekoodattiin, voisin etsiä vastaavaa tiedostoa. Säädin HomeAction . Alkaen app / Actions / HomeAction. pre :

     julkinen tehtävä __invoke (Request $ request,Vastaus $ vastaus){$ path = tuotosyhdistelmä ("/ js / app. js");$ Response-> päähän (" 
March 1, 2018