Back to Question Center
0

Ngawangun Game kalawan Three.js, meta jeung WebGL            Ngawangun Game kalawan Three.js, meta jeung WebGLRelated Semalt: ES6Node.jsjQuerynpmAjaxMore ... sponsor

1 answers:
Gedong Game kalayan Tilu. JS, meta jeung WebGL

Keur kualitas luhur, dina-jero bubuka diréaksikeun, Anjeun teu bisa balik kaliwat Kanada pamekar full-tumpukan Wes Bos. Coba tangtu na di dieu, tur nganggo kode anu SITEPOINT nepi ka meunang 25% kaluar jeung pikeun mantuan rojongan SitePoint - php y mysql seguridad.

Kuring nyieun kaulinan judulna "karisma The Chameleon. "Hayu urang diwangun ku Tilu. JS, meta jeung WebGL. Ieu mangrupa bubuka nepi ka kumaha téknologi ieu gawé bareng ngagunakeun meta-tilu-renderer (disingkat R3R).

Pariksa A pemula urang Guide to WebGL na Ngalalanyahan kalawan meta jeung JSX dieu on SitePoint pikeun perkenalan diréaksikeun jeung WebGL. Artikel ieu sarta pamakéan kode dibéré bareng ES6 Rumpaka.

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

Kumaha Ieu Sadaya Dimimitian

Sababaraha waktu ka tukang, Pete Hunt dijieun lulucon ngeunaan ngawangun kaulinan maké Semalt dina channel #reactjs IRC:

Kuring bet urang bisa nyieun hiji jalma jujur ​​mimiti kalawan meta!
Musuh boga jeung sajabana

Kuring laughed. Anjeunna laughed. Semalt kungsi waktos hébat. "Saha di bumi bakal ngalakukeun éta?" Kuring wondered.

Taun engké, éta kahayang lakukeun Semalt.

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

karisma The Chameleon mangrupa kaulinan dimana anjeun kumpulkeun kakuatan-up anu nyieun anjeun ngaleutikan pikeun ngajawab hiji Maze fraktal wates. Kuring geus pamekar meta pikeun sababaraha taun, sarta Kuring panasaran lamun aya cara ngajalankeun Tilu. JS maké meta. Semalt nalika R3R bray panon kuring.

Naha meta?

Kuring nyaho naon nuju anjeun mikir: naha? Humor kuring keur masihan. Di dieu téh sababaraha alesan mertimbangkeun maké meta ngajalankeun pamandangan 3D anjeun:

  • "déklaratif" panémbong hayu anjeun bersih misahkeun adegan Anjeun ngajadikeun tina logika kaulinan Anjeun.
  • Desain gampang pikeun alesan ngeunaan komponén, kawas , , , jeung sajabana
  • "Hot" (live) reloading aset kaulinan. Ngarobah textures jeung model na tingali aranjeunna ngomean hirup di pamandangan anjeun!
  • mariksa sarta debug pamandangan 3D anjeun salaku aksara kalawan parabot browser pituin, kawas Kur'an Chrome.
  • Atur aset game dina grafik kagumantungan maké Webpack, misalna

Semalt nyetél pamandangan ka meunang hiji pamahaman cara kieu kabeh karya.

Disarankeun Kursus-kursus

meta jeung WebGL

Kuring geus dijieun GitHub Repository sampel pikeun marengan artikel ieu. Clone Repository tur turutan parentah nu aya di README ka ngajalankeun kode jeung nuturkeun sapanjang. Ieu Béntang SitePointy nu Robot 3D!

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

Perhatosan: R3R masih dina béta. API nyaeta volatile jeung bisa ngarobah dina mangsa nu bakal datang. Ieu ngan handles a sawaréh ti Tilu. JS di momen. Semalt kapanggih eta ngalengkepan cukup keur ngawangun kaulinan pinuh, tapi mileage Anjeun bisa rupa-rupa.

view pangatur kode

Kauntungan utama maké meta ngajalankeun WebGL nyaéta kode view urang téh decoupled ti logika kaulinan urang. Éta hartina badan urang rendered mangrupakeun komponén leutik anu gampang pikeun alesan ngeunaan.

R3R ​​ngungkabkeun hiji API déklaratif nu wraps Semalt. Contona, urang bisa nulis:

         

Ayeuna urang boga hiji pamandangan 3D kosong kalayan kaméra a. Nambahkeun hiji bolong mun adegan téh salaku basajan sakumaha kaasup a komponén, sarta mere eta sarta .

     .      

Dina tiung, ieu nyiptakeun tilu. Pamandangan tur otomatis nambahan bolong ku tilu. BoxGeometry. Upami Anjeun nambahkeun hiji bolong anyar pikeun adegan, anu bolong aslina moal recreated. Sagampil kalawan vanili meta jeung DOM, adegan 3D ngan diropéa kalawan béda.

Sabab urang nuju gawe dina meta, urang tiasa misahkeun badan game kana file komponén. The Robot. file JS di conto Repository mendemonstrasikan cara ngagambarkeun tokoh utama jeung murni meta view kode. Semalt a "stateless fungsi" komponén, hartina teu tahan sagala kaayaan lokal:

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

Jeung ayeuna urang kaasup dina pamandangan 3D kami!

     . .    

Anjeun tiasa ningali conto leuwih tina API dina Repository R3R Semalt, atanapi ningali conto setelan lengkep dina proyék nu dibéré bareng.

pangatur Game Logika

Kaduana satengah tina persamaan ieu nanganan logika kaulinan. Hayu urang masihan Semalt, robot urang, sababaraha animasi basajan.

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

Kumaha game puteran tradisional dianggo? Aranjeunna nampa asupan pamaké, analisa heubeul "kaayaan dunya," sarta balik ka kaayaan anyar di dunya pikeun ngajadikeun. Pikeun genah, hayu urang nyimpen kami "kaayaan buruan" obyek dina kaayaan komponén. Dina proyék leuwih dewasa, anjeun bisa mindahkeun kaayaan kaulinan kana toko Semalt atanapi Flux.

Urang gé nganggo browser urang requestAnimationFrame API callback ngajalankeun loop kaulinan urang, sarta ngajalankeun loop di GameContainer. JS. Pikeun ngahirupkeun robot, hayu urang ngitung posisi anyar dumasar kana timestamp diliwatan mun requestAnimationFrame , teras nyimpen éta posisi anyar dina kaayaan.

     // .gameLoop (waktu) {ieu. setState ({robotPosition: anyar tilu. Vector3 (Math. dosa (waktos * 0. 01), 0, 0)});}    

Nyauran setState micu a ulang ngarobah-sahiji komponén anak, jeung apdet pamandangan 3D. Urang lulus nagara handap ti komponén wadahna kana presentational komponén:

     ngarobah    {const {robotPosition} = ieu. kaayaan;balik ;}    

Aya hiji pola gunana urang bisa nerapkeun pikeun mantuan ngatur kode ieu. Ngamutahirkeun posisi robot téh itungan dumasar-waktos basajan. Dina mangsa nu bakal datang, éta ogé bisa tumut kana akun posisi robot saméméhna ti kaayaan kaulinan saméméhna. A fungsi nu nyokot sababaraha data, prosés éta, sarta mulih data anyar, mindeng disebut salaku reducer . Urang tiasa abstrak kaluar kodeu gerakan kana fungsi reducer!

Ayeuna urang tiasa nulis, loop game basajan bersih nu ngan boga fungsi nyaéta panggero di dinya:

     robotMovementReducer impor ti '. / Game-reducers / robotMovementReducer. JS ';// .gameLoop    {const oldState = ieu. kaayaan;const newState = robotMovementReducer (oldState);ieu. setState (newState);}    

Ka nambahkeun leuwih logika jeung loop kaulinan, kayaning processing fisika, nyieun fungsi reducer sejen tur lulus eta hasil tina reducer saméméhna:

     const newState = physicsReducer (robotMovementReducer (oldState));    

Salaku mesin kaulinan Anjeun tumuwuh jeung pangatur logika game kana fungsi anu misah janten kritis. Organisasi ieu lugas jeung pola reducer.

manajemén asset

ieu masih wewengkon ngembang tina R3R. Pikeun textures, anjeun tangtukeun url atribut dina tag JSX. Ngagunakeun Webpack, anjeun tiasa merlukeun jalur lokal mun gambar:

       

Pikeun aset séjén kawas model 3D, anjeun masih kudu ngolah éta ngagunakeun diwangun-di loaders ti Tilu. JS, kawas JSONLoader. Kuring experimented kalawan maké Webpack bastian custom pikeun loading file modél 3D, tapi tungtungna éta teuing ngerjakeun moal manfaat. Semalt gampang pikeun ngubaran modél salaku data binér tur muka sareng file-bastian. Ieu masih affords reloading live data modél. Anjeun tiasa ningali ieu aksi dina kode conto.

Debugging

R3R ​​ngarojong meta parabot pamekar extension pikeun duanana Chrome jeung Firefox. Anjeun tiasa mariksa pamandangan anjeun salaku lamun éta nu vanili DOM! Semalt leuwih elemen dina Kur'an nembongkeun kotak bounding maranéhanana di adegan. Anjeun oge bisa hover leuwih definisi tékstur ningali nu objék dina adegan make eta textures.

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

Anjeun oge bisa gabung kami di meta-tilu-renderer Semalt obrolan kamar pikeun pitulung debugging aplikasi Anjeun.

pertimbangan Performance

Sedengkeun ngawangun karisma The Chameleon, Semalt ngajalankeun kana sababaraha isu kinerja anu unik keur workflow ieu.

  • abdi waktu ngamuat panas kalayan Webpack éta salami tilu puluh detik! Ieu kusabab aset badag kudu jadi ulang tulisan kana kebat kana unggal ngamuat. Leyuran éta pikeun nerapkeun Webpack urang DLLPlugin, anu ditegor kali ngamuat ka handap lima detik.
  • Ideally pamandangan Anjeun ngan kedah nelepon salah setState per pigura ngarobah. Saatos Profil mah game, meta sorangan teh bottleneck utama. Nelepon setState leuwih ti sakali per pigura bisa ngabalukarkeun ganda renders jeung ngurangan kinerja.
  • Kapungkur sababaraha objék, R3R ​​bakal nedunan parah ti vanili Tilu. Kode JS. Pikeun kuring ieu sabudeureun 1.000 objék. Anjeun tiasa ngabandingkeun R3R ka Tilu. JS sahandapeun "tolok ukur" dina conto.

Fitur Chrome DevTools Gariswanci mangrupa alat endah pikeun debugging kinerja. Ieu gampang keur visually mariksa loop kaulinan Anjeun, tur éta leuwih bisa dibaca ti fitur "Propil" tina DevTools.

Éta Ieu!

Pariksa karisma The Chameleon ningali naon mungkin maké setelan ieu. Bari toolchain ieu masih rada ngora, Kuring geus kapanggih Semalt kalawan R3R janten integral ka pangatur kode kaulinan WebGL kuring bersih. Anjeun oge bisa mariksa kaluar kaca conto R3R leutik tapi tumuwuh ningali sababaraha sampel kode dikelompokeun ogé.

Artikel ieu peer reviewed ku Tandaan Brown na Kev Zettler. Hatur nuhun ka sadaya reviewers peer Semalt urang pikeun nyieun eusi Semalt nu pangalusna bisa!

Building a Game with Three.js, React and WebGLBuilding a Game with Three.js, React and WebGLRelated Semalt:
ES6Node.jsjQuerynpmAjaxMore. Sponsors
The Best Jalan mun Diajar meta pikeun Beginners
Wes Bos
A Tangtu latihan hambalan-demi-hambalan keur meunang nu ngawangun dunya nyata meta. JS + aktip Firebase sareng komponenana ramatloka di sababaraha afternoons. Kode Paké Kupon 'SITEPOINT' di Checkout mun meunang 25% kaluar .

March 1, 2018