Back to Question Center
0

Three.js, प्रतिक्रिया और WebGL के साथ एक खेल का निर्माण            Three.js, प्रतिक्रिया और WebGL के साथ एक खेल का निर्माण संबंधित मिमल: ES6Node.jsjQuerynpmAjaxMore ... प्रायोजक

1 answers:
तीन के साथ गेम बनाना जेएस, रिएक्ट और वेबजीएल

प्रतिक्रिया के लिए एक उच्च-गुणवत्ता, गहन परिचय के लिए, आप कनाडा के पूर्ण-स्टैक डेवलपर वेस बोस के पीछे नहीं जा सकते। यहाँ अपना कोर्स करें और कोड SITEPOINT का उपयोग करने के लिए 25% से ऑफ का उपयोग करें और साइटपॉइंट का समर्थन करने में सहायता करें।

मैं एक खेल बना रहा हूं जिसका नाम "करिश्मा द गिरगिट "यह तीन के साथ बनाया गया है जेएस, रिएक्ट और वेबजीएल यह एक परिचय है कि इन तकनीकों को प्रतिक्रिया-तीन-रेंडरर (संक्षिप्त R3R) का उपयोग करके एक साथ कैसे मिलकर काम किया जाता है।

वेबजीएल के लिए एक शुरुआती गाइड देखें और प्रतिक्रिया और वेबजीएल के परिचय के लिए साइटपॉइंट पर रिएक्ट और जेएसएक्स के साथ आरंभ करें। यह आलेख और साथ कोड ES6 सिंटैक्स का उपयोग करता है

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

कैसे यह सब शुरू

कुछ समय पहले, पीट हंट ने # आरएटजेएस आईआरसी चैनल में सेमील्ट का उपयोग कर एक गेम बनाने के बारे में मजाक दिया था:

मुझे यकीन है कि हम प्रतिक्रिया के साथ पहले व्यक्ति शूटर बना सकते हैं!
शत्रु <हेड> <बॉडी> <पैर> आदि

मैं हँसे वे हंसे। Semaltेट का एक अच्छा समय था "पृथ्वी पर कौन ऐसा करेगा?" मैंने सोचा,

कई सालों बाद, यह ठीक है कि साल्टल्ट

Building a Game with Three.js, React and WebGLBuilding a Game with Three.js, React and WebGLRelated Semalt:
ES6Node.jsjQuerynpmAjaxMore - <a href=fireluke tank cheap. Sponsors "/>

करिश्मा गिरगिट एक खेल है जहां आप बिजली-अप इकट्ठा करते हैं जिससे आप एक असीम भग्न भूलभुलैया को हल करने के लिए सिकुड़ते हैं। मैं कुछ वर्षों के लिए डेवलपर के लिए एक प्रतिक्रिया कर रहा था, और अगर मैं तीन ड्राइव करने का एक तरीका था तो मैं उत्सुक था जे एस प्रतिक्रिया का उपयोग करें जब आरएएसआर ने मेरी आँख पकड़ा तब Semaltेट

क्यों प्रतिक्रिया?

मुझे पता है कि आप क्या सोच रहे हैं: क्यों? मुझे एक क्षण के लिए हास्य। आपके 3D दृश्य को चलाने के लिए प्रतिक्रिया का उपयोग करने पर विचार करने के कुछ कारण हैं:

  • "घोषणात्मक" विचारों से आप अपने गेम लॉजिक से स्पष्ट रूप से अपने दृश्य को अलग कर सकते हैं।
  • डिज़ाइन, घटकों के बारे में सोचने में आसान है, जैसे > , , , आदि।
  • खेल संपत्तियों के "हॉट" (लाइव) पुनः लोड। बनावट और मॉडल बदलें और उन्हें अपने दृश्य में लाइव अपडेट देखें!
  • क्रोम इंस्पेक्टर की तरह मूल ब्राउज़र उपकरण के साथ मार्कअप के रूप में अपने 3 डी दृश्य का निरीक्षण और डीबग करें।
  • वेबपैक का उपयोग करके निर्भरता ग्राफ़ में गेम संपत्तियां प्रबंधित करें, जैसे <बनावट स्रोत = {आवश्यकता ('। / Assets / image। Png')} />

Semalt्ट ने यह सब समझने के लिए एक दृश्य स्थापित किया कि यह सब कैसे काम करता है

अनुशंसित पाठ्यक्रम

प्रतिक्रिया और वेबजीएल

मैंने इस अनुच्छेद के साथ एक नमूना GitHub रिपॉजिटरी बनाई है I रिपॉजिटरी क्लोन करें और कोड को चलाने के लिए README में निर्देशों का पालन करें और साथ में पालन करें। यह साइटपॉईन्टी 3 डी रोबोट को तारे!

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

चेतावनी: आर -3 आर अभी भी बीटा में है इसकी एपीआई अस्थिर है और भविष्य में बदल सकती है। यह केवल तीन के सबसेट का प्रबंधन करता है फिलहाल जे एस Semaltेट ने इसे पूर्ण गेम बनाने के लिए पर्याप्त रूप से पूरा किया, लेकिन आपका माइलेज अलग-अलग हो सकता है।

दृश्य कोड का आयोजन

वेबजीएल को चलाने के लिए प्रतिक्रिया का उपयोग करने का मुख्य लाभ यह है कि हमारा गेम कोड decoupled हमारे गेम तर्क से है इसका मतलब है कि हमारे प्रदान किए गए संस्थाएं छोटे घटक हैं जो कि इसके बारे में सोचना आसान है।

आर 3 आर एक घोषणात्मक एपीआई को उजागर करता है जो कि सेमील्ट उदाहरण के लिए, हम लिख सकते हैं:

     <दृश्य>    

अब हमारे पास कैमरा के साथ एक खाली 3 डी दृश्य है दृश्य में एक जाल को जोड़ना एक घटक को शामिल करना और इसे देना और एक <सामग्री /> के रूप में सरल है।

     <दृश्य>.<जाल>      

हुड के तहत, यह तीन बनाता है दृश्य और स्वचालित रूप से तीन के साथ एक जाल जोड़ता है BoxGeometry. यदि आप इस दृश्य के लिए एक नया जाल जोड़ते हैं, तो मूल मेष का पुन: निर्माण नहीं किया जाएगा। वैनिला रिएक्ट और डोम के साथ ही, 3 डी दृश्य केवल अंतर के साथ अपडेट किया गया है

क्योंकि हम प्रतिक्रिया में काम कर रहे हैं, हम खेल इकाइयों को घटक फ़ाइलों में अलग कर सकते हैं। रोबोट। उदाहरण के रिपॉजिटरी में जेएस फ़ाइल दर्शाती है कि शुद्ध रिएक्ट व्यू कोड के साथ मुख्य पात्र का प्रतिनिधित्व कैसे करें। एक "स्टेटलेस फ़ंक्शनल" घटक को कम से कम करना, जिसका अर्थ है कि यह किसी भी स्थानीय राज्य को नहीं रखता है:

     कॉन्ब रोबोट = ({स्थिति, घूर्णन}) =>  <समूहस्थिति = {स्थान}रोटेशन = {रोटेशन}>  <जाल रोटेशन = {स्थानीय रोटेशन}>         ;    

और अब हम हमारे 3 डी दृश्य में <रोबोट /> शामिल हैं!

     <दृश्य>.<जाल> .  <रोबोटस्थिति = {. }रोटेशन = {. }/>    

आप आर 3 आर Semalt्ट रिपॉजिटरी पर एपीआई के और अधिक उदाहरण देख सकते हैं, या साथ-साथ परियोजना में पूर्ण उदाहरण सेटअप देख सकते हैं।

गेम तर्क संयोजन

समीकरण का दूसरा छमाही खेल तर्क को संभालना है। चलो, मिसाल, हमारे रोबोट, कुछ साधारण एनीमेशन देते हैं।

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

खेल कैसे loops पारंपरिक रूप से काम करते हैं? वे उपयोगकर्ता इनपुट स्वीकार करते हैं, पुरानी "दुनिया की स्थिति" का विश्लेषण करते हैं और रेंडरिंग के लिए दुनिया की नई स्थिति को वापस करते हैं। सुविधा के लिए, हमारे "गेम स्टेट" ऑब्जेक्ट को घटक राज्य में संग्रहीत करते हैं। अधिक परिपक्व प्रोजेक्ट में, आप खेल राज्य को एक मिमल या फ्लक्स स्टोर में ले जा सकते हैं।

हमारे गेम लूप को चलाने के लिए और GameContainer में लूप चलाने के लिए हम ब्राउज़र के अनुरोध ऍनिमेशनफ़्रेम API कॉलबैक का उपयोग करेंगे। जे एस। रोबोट को चेतन करने के लिए, चलिए अनुरोधएनिमेशनफ्रेम को पास किए गए टाइमस्टैम्प के आधार पर एक नई स्थिति की गणना करें, फिर स्थिति में नई स्थिति को स्टोर करें।

     // .गेमलूप (समय) {इस। setState ({रोबोटः नई तीन Vector3 (गणित। पाप (समय * 0. 01), 0, 0)});}    

कॉलिंग सेटस्टेट बाल घटकों का पुन: रेंडर, और 3 डी दृश्य अपडेट चलाता है हम कंटेनर घटक से वर्तमान स्थिति में राज्य को पास करते हैं <गेम /> घटक:

     प्रस्तुत करना    {const {robotPosition} = यह राज्य;वापसी  <गेमरोबोटपोजीशन = {रोबोटपॉज़िशन}/> ;}    

इस कोड को व्यवस्थित करने में मदद करने के लिए हम एक उपयोगी पैटर्न लागू कर सकते हैं। रोबोट की स्थिति को अपडेट करना एक सरल समय-आधारित गणना है। भविष्य में, यह पिछले गेम स्टेट से पिछले रोबोट की स्थिति को भी ध्यान में रख सकता है। एक फ़ंक्शन जो कुछ डेटा में लेता है, उसे प्रोसेस करता है, और नए डेटा देता है, जिसे अक्सर रेड्यूसर के रूप में संदर्भित किया जाता है हम एक कट्टरपंथी फ़ंक्शन में आंदोलन कोड को बाहर कर सकते हैं!

अब हम एक स्वच्छ, सरल गेम लूप लिख सकते हैं, जिसमें केवल इसमें कॉल किया गया है:

  (9 8) आयात रोबोट से बचावकर्मी '। / खेल-reducers / robotMovementReducer। js ';// .gameLoop    {const oldState = यह राज्य;कॉन्स्ट न्यूस्टेट = रोबोटमॉवमेंट रेड्यूसर (पुरानेस्टेट);इस। सेटस्टेट (न्यूस्टेट);}    

गेम लूप में अधिक तर्क जोड़ने के लिए, जैसे कि प्रसंस्करण भौतिकी, एक और रिड्यूसर फ़ंक्शन बनाते हैं और पिछले रेड्यूसर के परिणाम को पारित करते हैं:

     कॉन्स्ट करें न्यूस्टेट = फिजिक्स रेड्यूसर (रोबोटवर्ल्ड रेड्यूसर (पुराना स्टेट));    

जैसे आपका गेम इंजन बढ़ता है, खेल तर्क को अलग-अलग कार्यों में व्यवस्थित करना महत्वपूर्ण हो जाता है। यह संगठन रीड्यूसर पैटर्न के साथ सरल है

(17 9) संपत्ति प्रबंधन

यह अभी भी आर 3 आर का एक विकसित क्षेत्र है बनावट के लिए, आप जेएसएक्स टैग पर एक यूआरएल विशेषता निर्दिष्ट करते हैं। वेबपैक का उपयोग करके, आप छवि को स्थानीय पथ की आवश्यकता कर सकते हैं:

     <बनावट यूआरएल = {आवश्यकता ('। / स्थानीय / छवि / पथ.  

3 डी मॉडल जैसी अन्य संपत्तियों के लिए, आपको अभी भी तीन से निर्मित इन लोडर्स का उपयोग करने की प्रक्रिया है JSONLoader जैसी जेएस मैंने 3 डी मॉडल फ़ाइलों को लोड करने के लिए एक कस्टम वेबपैक लोडर का उपयोग करने के साथ प्रयोग किया, लेकिन अंत में यह कोई फायदा नहीं था। मॉडल को द्विआधारी डेटा के रूप में व्यवहार करने और फ़ाइल-लोडर के साथ लोड करने के लिए साम्लाटल आसान है। यह अभी भी मॉडल डेटा का लाइव पुनः लोडिंग देता है। आप इसे उदाहरण कोड में कार्रवाई में देख सकते हैं।

(1 9 3) डिबगिंग

आर 3 आर क्रोम और फ़ायरफ़ॉक्स दोनों के लिए डेवलपर टूल्स एक्सटेंशन पर प्रतिक्रिया का समर्थन करता है। आप अपने दृश्य का निरीक्षण कर सकते हैं जैसे कि वेनिला डोम! निरीक्षक में तत्वों पर मिसाल्ट दृश्य में अपने बाउंडिंग बॉक्स को दिखाता है। आप टेक्सचर परिभाषाओं पर हॉवर कर सकते हैं यह देखने के लिए कि दृश्य में कौन से ऑब्जेक्ट उस टेक्स्ट का उपयोग करते हैं।

(1 9 8)

आप अपने अनुप्रयोगों को डिबग करने में सहायता के लिए प्रतिक्रिया-तीन-रेंडरर सेमील्ट चैट रूम में भी जुड़ सकते हैं।

प्रदर्शन संबंधी बातें

करिश्मा का निर्माण करते समय गिरगिट, सैमलेट कई कार्यप्रवाह मुद्दों में चलाया जाता है जो इस कार्यप्रवाह के लिए अद्वितीय हैं।

  • मेरे गर्म पुनः लोड समय वेबपैक के साथ ही तीस सेकंड तक था! इसका कारण यह है कि बड़ी संपत्ति को हर पुनः लोड पर बंडल में फिर से लिखा जाना चाहिए। इसका समाधान वेबपैक के डीएलएलप्लगिन को कार्यान्वित करना था, जो पुनः लोड समय को पांच सेकंड से कम कर देता है।
  • आदर्श रूप से आपके दृश्य को केवल कॉल करना चाहिए एक सेटस्टेट प्रति फ्रेम रेंडर करना मेरे खेल की रूपरेखा के बाद, खुद पर प्रतिक्रिया मुख्य अवरोधन है। कॉलिंग सेटस्टेट एक बार से अधिक फ्रेम प्रति डबल रेंडर कर सकते हैं और प्रदर्शन को कम कर सकते हैं
  • वस्तुओं की एक निश्चित संख्या पिछले, आर 3 आर वेनिला से अधिक प्रदर्शन करेंगे तीन जेएस कोड मेरे लिए यह लगभग 1,000 वस्तुओं था। आप आर 3 आर से तीन की तुलना कर सकते हैं जेएस उदाहरणों में "बेंचमार्क" के तहत।

Chrome DevTools टाइमलाइन सुविधा डिबगिंग प्रदर्शन के लिए एक अद्भुत उपकरण है। आपके गेम लूप का अवलोकन करना आसान है, और यह DevTools की "प्रोफ़ाइल" सुविधा से अधिक पठनीय है।

ये है!

करिश्मा की जाँच करें इस सेटअप का उपयोग करने के लिए क्या संभव है यह देखने के लिए गिरगिट। हालांकि यह टूलचेन अभी भी काफी छोटा है, मैंने अपने वेबजीएल गेम कोड को व्यवस्थित रूप से व्यवस्थित करने के लिए आर 3 आर के साथ सेमील्ट पाया है कुछ सुव्यवस्थित कोड नमूने देखने के लिए आप छोटे लेकिन बढ़ते R3R उदाहरण पृष्ठ भी देख सकते हैं।

मार्क ब्राउन और केव झेटलर द्वारा इस लेख की समीक्षा की गई। Semalt्ट के समीक्षक समीक्षक के लिए धन्यवाद, साम्बाट सामग्री बनाने के लिए सबसे अच्छा यह हो सकता है!

Building a Game with Three.js, React and WebGLBuilding a Game with Three.js, React and WebGLRelated Semalt:
ES6Node.jsjQuerynpmAjaxMore. Sponsors
शुरुआती
जानने के लिए सबसे बेहतर तरीका
वेस बोस
वास्तविक दुनिया बनाने के लिए एक कदम-दर-चरण प्रशिक्षण पाठ्यक्रम प्रतिक्रिया दें। दो दोपहर में जेएस + फायरबेज ऐप और वेबसाइट घटकों कूपन कोड 'एसआईटीपीओएनटी' का चेकआउट प्राप्त करने के लिए 25% ऑफ का उपयोग करें।

March 1, 2018