Back to Question Center
0

Bangunan Game kanthi Three.js, React and WebGL            Bangunan Game kanthi Three.js, React and WebGLRelated Semalt: ES6Node.jsjQuerynpmAjaxMore ... Sponsors

1 answers:
Nggawe Game nganggo Telung. js, React and WebGL

Kanggo ngenalaken babagan React, sampeyan ora bisa nglangkungi pangembang lengkap stack Kanada Wes Bos. Coba tuju kene, lan gunakake kodhe SITEPOINT kanggo njaluk 25% mati lan mbantu support SitePoint - nudo corbata gruesa.

Aku nggawe game kanthi judul "Charisma The Chameleon. "Iku dibangun karo Three. js, React and WebGL. Iki minangka perkenalan cara teknologi kasebut bisa digunakake bebarengan nggunakake reaksi-teleser-penyaji (disingkat R3R).

Priksa Pandhuan Beginner kanggo WebGL lan Miwiti React lan JSX kene ing SitePoint kanggo nepangaken React and WebGL. Artikel iki lan kode sing diiringi nganggo Sintaks ES6.

Building a Game with Three.js, React and WebGLBuilding a Game with Three.js, React and WebGLRelated Semalt:
ES6Node.jsjQuerynpmAjaxMore. Sponsors

Cara Kabeh Biyen

Sawetara wektu kepungkur, Pete Hunt nggawe lelucon babagan mbangun game nggunakake Semalt ing channel IRC #reactjs:

Aku arep nggawe wong pisanan karo React!
Enemy nduweni

Aku ngguyu. Dheweke ngguyu. Semalat wis wektu gedhe. "Sapa ing bumi bakal nglakoni apa?" Aku kepingin weruh.

Taun salajengipun, punika kados punapa Semalat ingkang.

Building a Game with Three.js, React and WebGLBuilding a Game with Three.js, React and WebGLRelated Semalt:
ES6Node.jsjQuerynpmAjaxMore. Sponsors

Karisma Bunglon punika game ngendi sampeyan ngumpulake daya-ups sing nggawe sampeyan nyilikake kanggo ngatasi maze fractal tanpa wates. Aku wis dadi pangembang React kanggo sawetara taun, lan aku kepengin weruh yen ana cara kanggo drive Tiga. js nggunakake React. Semalt nalika R3R kejiret mripatku.

Apa React?

Aku ngerti apa sing sampeyan pikirake: kok? Ngomongi aku sedhela. Kene sawetara alasan kanggo nimbang nggunakake React kanggo drive adegan 3D:

  • "Declarative" views supaya sampeyan cleanly misahake rendering pemandangan saka logika game.
  • Desain gampang kanggo alasan babagan komponen, kaya , ,
  • Ngunggah ulang "aset" (live) (urip) aset game. Ngganti tekstur lan model lan ndeleng wong nganyari langsung ing layar!
  • Mriksa lan debug tampilan 3D sampeyan minangka markup karo alat browser native, kaya inspektur Chrome.
  • Ngatur aset game ing grafik dependensi nggunakake Webpack, eg

Semalat nyetel adegan kanggo mangerteni carane kabeh iki bisa dienggo.

Kursus Dianjur

React and WebGL

Aku nggawe sample GitHub repositori kanggo ngiringi artikel iki. Klone panyimpenan banjur tindakake pandhuan ing README kanggo mbukak kode lan tindakake bebarengan. Iku bintang SitePointy the Robot 3D!

Building a Game with Three.js, React and WebGLBuilding a Game with Three.js, React and WebGLRelated Semalt:
ES6Node.jsjQuerynpmAjaxMore. Sponsors

Pènget: R3R isih beta. API menehi volatil lan bisa diganti ing mangsa ngarep. Iku mung nangani bagean saka Tiga. js ing wayahe. Semalat ketemu cukup lengkap kanggo mbangun game lengkap, nanging biaya sampeyan bisa beda-beda.

Ngatur tampilan kode

Manfaat utama nggunakake React kanggo drive WebGL yaiku kode tampilan kita decoupled saka logika game kita. Tegese entitas sing kita entuk kasebut minangka komponen cilik sing gampang kanggo alasan.

R3R ​​ngumumake API declaratif sing mbungkus Semalt. Contone, kita bisa nulis:

         

Saiki kita duwe adegan 3D kosong nganggo kamera. Nambahake bolong ing adegan minangka gampang kaya ngemot komponen , lan menehi lan .

     .      

Ing hood, iki nggawe THREE. Pemandangan lan kanthi otomatis nambah bolong nganggo THREE. BoxGeometry. Yen sampeyan nambahake bolong anyar menyang pemandangan, mesh asli ora bakal dicipta ulang. Kaya karo vanilla React lan DOM, adegan 3D mung dianyari karo beda-beda.

Amarga kita digunakake ing React, kita bisa misahake entitas game dadi file komponèn. Robot. js file ing conto repositori nuduhaké cara makili karakter utama kanthi kode tampilan React murni. Semalt minangka komponèn "stateless fungsional", tegesipun boten wonten kahanan lokal:

     const Robot = ({posisi, rotasi}) =>             ;    

Lan saiki kita kalebu ing 3D kita!

     . .    

Sampeyan bisa ndeleng conto API liyane ing repositori R3R Semalt, utawa ndeleng panrapan tuladha lengkap ing proyek sing diiringi.

Ngatur Game Logika

Paragraf kapindho persamaan nangani logika game. Ayo menehi Semalt, robot kita, animasi prasaja.

Building a Game with Three.js, React and WebGLBuilding a Game with Three.js, React and WebGLRelated Semalt:
ES6Node.jsjQuerynpmAjaxMore. Sponsors

Kepiye cara puteran cara tradisional? Padha nampa input pangguna, nganalisa "negara ing donya lawas," lan bali menyang negara anyar kanggo rendering. Kanggo penak, ayo simpen obyek game "negara kita" ing negara komponen. Ing proyek liyane sing diwasa, sampeyan bisa mindhah kahanan game menyang toko Semalt utawa Flux.

Kita bakal nggunakake callback API requestAnimationFrame browser kanggo drive loop game kita, lan mbukak loop ing GameContainer. js. Kanggo ngowahi robot, ngetung posisi anyar miturut timestamp sing dikirim menyang requestAnimationFrame , banjur simpen posisi anyar ing negara.

     // .gameLoop (wektu) {iki. setState ({robotPosition: anyar THREE. Vektor3 (Math. dosa (wektu * 0,01), 0, 0)});}    

Nelpon setState nyebabake re-render komponen anak, lan nganyari adegan 3D. We pass negara mudhun saka komponen wadhah kanggo presentational komponen:

     nerjemahake    {const {robotPosition} = iki. negara;bali ;}    

Ana pola migunani sing bisa digunakake kanggo ngatur kode iki. Nganyari posisi robot iku pitungan basis wektu sing prasaja. Ing mangsa ngarep, uga bisa njupuk posisi robot sadurungé saka negara game sadurungé. Fungsi sing njupuk ing sawetara data, proses, lan ngasilake data anyar, asring diarani minangka reducer . Kita bisa abstrak metu kode gerakan menyang fungsi reducer!

Saiki, kita bisa nulis gelaran dolanan sing resik sing mung nduweni fungsi:

     Impor robotMovementReducer saka '. / game-reducers / robotMovementReducer. js ';// .gameLoop    {const oldState = iki. negara;const newState = robotMovementReducer (oldState);iki. setState (newState);}    

Kanggo nambah logika kanggo loop game, kayata ngolah fisika, nggawe fungsi reducer liyane lan liwati asil saka reducer sadurungé:

     const newState = fisikaReducer (robotMovementReducer (oldState));    

Nalika mesin game sampeyan tuwuh, ngatur logika game dadi fungsi sing kapisah dadi kritis. Organisasi iki langsung karo pola reducer.

Manajemen aset

Iki isih dadi R3R. Kanggo tekstur, sampeyan nemtokake atribut url ing tag JSX. Nggunakake Webpack, sampeyan bisa mbutuhake path lokal menyang gambar:

       

Kanggo aset liyane kaya model 3D, sampeyan isih kudu ngolah kanthi nggunakake loader saka Three. js, kaya JSONLoader. Aku nyinau kanthi nggunakake webpack loader adat kanggo ngemot file model 3D, nanging ing pungkasan iku akeh banget kanggo ora entuk manfaat. Semalat luwih gampang ngobati model minangka data biner lan mbukak karo file-loader. Iki isih menehi urip maneh data model. Sampeyan bisa ndeleng iki ing tumindak ing kode conto.

Debugging

R3R ​​ndhukung ekstensi alat pangembang kanggo Chrome lan Firefox. Sampeyan bisa mriksa pemandangan sing kaya DOM vanila! Semanti liwat unsur ing inspektur nuduhake kothak bounding ing pemandangan. Sampeyan uga bisa ngudhari dhéfinisi tekstur kanggo ndeleng obyek sing ana ing adegan nggunakake tekstur kasebut.

Building a Game with Three.js, React and WebGLBuilding a Game with Three.js, React and WebGLRelated Semalt:
ES6Node.jsjQuerynpmAjaxMore. Sponsors

Sampeyan uga bisa nggabungake kita ing ruang obrolan Semalt sing ngasilake reaksi telu kanggo mbantu debugging aplikasi sampeyan.

Pertimbangan Kinerja

Nalika mbangun Karisma The Chameleon, Semalt lunga menyang sawetara masalah kinerja sing unik kanggo alur kerja iki.

  • Waktu relo panas karo Webpack mung telung puluh detik! Iki amarga aset gedhé kudu ditulis maneh ing bunder ing saben waca maneh. Solusi iki yaiku kanggo ngleksanakake DLLPlugin Webpack, sing ngurangi kaping reload nganti limang detik.
  • Idea adegan sampeyan mung kudu nelpon siji setState saben bingkai sing nerjemahake. Sawise profiling game, React dhewe minangka hambalan utama. Nelpon setState luwih saka sepisan saben bingkai bisa nyebabake kinerja ganda lan ngurangi kinerja.
  • Mungkasi obyek tartamtu, R3R ​​bakal nindakake luwih sithik saka telu vanilla. kode js. Kanggo kula iki ana watara 1.000 obyek. Sampeyan bisa mbandhingake R3R kanggo Telung. js ing "Benchmarks" ing conto.

Fitur Chrome DevTools Timeline minangka alat sanget kanggo debugging kinerja. Iku gampang kanggo nonton visual game loop, lan luwih bisa diwaca saka fitur "Profile" saka DevTools.

Iku Iku!

Priksa Charisma Bunglon kanggo ndeleng apa sing bisa nggunakake persiyapan iki. Nalika toolchain iki isih enom, aku nemokake Semalt karo R3R dadi integral kanggo ngatur game game WebGL saya kanthi apik. Sampeyan uga bisa mriksa kaca conto R3R cilik nanging akeh kanggo ndeleng sawetara conto kode sing teratur.

Artikel iki ditemokake dening Mark Brown lan Kev Zettler. Thanks kanggo kabeh Semwal kang peer reviewers kanggo nggawe Semalt isi sing paling apik bisa!

Building a Game with Three.js, React and WebGLBuilding a Game with Three.js, React and WebGLRelated Semalt:
ES6Node.jsjQuerynpmAjaxMore. Sponsors
Cara paling apik kanggo sinau reaksi kanggo pemula
Wes Bos
Course latihan langkah-langkah kanggo njaluk sampeyan mbangun donya nyata React. js + Aplikasi Firebase lan komponen situs web ing sawetara afternoons. Gunakake kode coupon 'SITEPOINT' ing checkout kanggo njaluk mati 25% .

March 1, 2018