सभी को पूरा दिन शुभ हो। मैं आपको इस बारे में बताना चाहता हूं कि मैं 3+ वर्षों के बाद एक शौकिया गेम देव में कैसे लौटा, मौलिक रूप से टूल को बदल रहा था (और जिस तरह से - मेरी विश्वदृष्टि), और इसके बारे में क्या आया। कटौती के तहत आप:
- यात्रा की शुरुआत में सभी तथ्यों का संक्षिप्त विवरण। सस्ते ऑनलाइन विज्ञापन "BEFORE" और "बाद" में "BEFORE" तस्वीर की तरह।
- "स्वेत, लेबोव्स्की कहाँ है?" की शैली में एक आधुनिक दृश्य में एक स्वैच्छिक गोता।
- एक अंतरंग बिंदु पर थोड़ी खुजली, कुछ पुराना करके कुछ नया सीखने की ज्वलंत इच्छा में बदल जाना।
- खुद की लाचारी के बारे में जागरूकता
- पर काबू पाने
- आपकी इन फिल्मों की तरह ही अच्छा अंत हुआ।
त्याग
यह लेख दो साल के लिए जीथब पर ड्राफ्ट फॉर्म में था, इसका लगभग पूर्ण संस्करण 2017 के अंत में घटनाओं के गर्म खोज में लिखा गया था।
नागरिक, अपना परिचय दें!
मेरे पिछले लेख ( https://habrahabr.ru/post/244417/ ) में मैंने अपने बारे में थोड़ा लिखा है, और विशेष रूप से मैं और गमेदेव कैसे जुड़े हुए हैं। डी ज्यूर - कोई रास्ता नहीं, वास्तव में - मैं खेल और खुशी और दीपक प्रतियोगिताओं में भागीदारी के लिए इंजन लिखता हूं। तब से, थोड़ा बदल गया है।
आगे के कथन के लिए और आवश्यक वातावरण को मजबूर करने के लिए, यह महत्वपूर्ण है कि इस कहानी की शुरुआत में मैं एक पेशेवर .net वेब डेवलपर हूं जो html5, css3 और ... jquery का उपयोग कर सकता है। अप्रत्याशित "यह एक मोड़ है" को सुदृढ़ करने के लिए, हम कहते हैं कि जावास्क्रिप्ट के लिए अविश्वास और घृणा है, के साथ अनुभवी:
- भाषा के चारों ओर इस सभी प्रचार की गलतफहमी;
- टाइपिंग, फ्रेमवर्क के त्वरित अप्रचलन, संख्या + स्ट्रिंग-आश्चर्य, और बहुत कुछ के बारे में चुटकुले का एक सेट। आप जानते हैं, एक पुरानी और अधिक स्थापित भाषा का उपयोग करके डेवलपर्स का ऐसा पूरी तरह से मानक, सौम्य रूप से सेट (हे, मुझे पता है कि .net प्लेटफॉर्म js से छोटा है, लेकिन शाब्दिक अर्थ में "वयस्क" नहीं है)।
साथ आओ!
सितंबर 2017. मैंने एक नई टेक्नॉलॉजी स्टैक (.net कोर वेब एपीआई + कोणीय 4) के साथ एक नया गर्म और दीपक काम शुरू किया और मेरा काम केवल बैकएंड था। शब्द कोणीय मुझे अपमानजनक लग रहा था, npm और नोडज, स्मूथी और गायरो स्कूटर के साथ दृढ़ता से जुड़े थे। टिमलीड ने इसे और समझ को देखते हुए मुझे इस छोटे से शैतानी को लॉन्च करने का एक छोटा कोर्स सिखाया। ठीक उसी तरह जैसे कि अंतरिक्ष में चुची और कुत्तों के बारे में मजाक किया जाता है। मुझे याद है कि बैट-उपनामों को मुझे शुरू करने की आवश्यकता है (एनपीएम रन को याद करते हुए मैंने इसे अपने सौम्य स्वभाव के लिए बेहद अनावश्यक पाया), और खुद को गर्मजोशी से डुबो दिया दीपक एलईडी .net कोर।
अक्टूबर 2017. पहली घंटी। टिमलाइड का कहना है कि हमारा फ्रंट-लाइन कार्यकर्ता अभी 4 परियोजनाओं पर काम करता है और मुझे एडमिन एरिया में कुछ सेक्शन में कटौती करने की पेशकश करता है। प्रेरित करते हुए, वे कहते हैं, यह वहाँ आसान है, बस एन कैसे एन के लिए किया गया था, केवल अब दोहराएं। केवल एक स्कूटर के लिए भाग रहे सहयोगियों और मेरे लिए एक बलात्कार की चकली के लिए, जल्द ही कॉपी-पेस्ट और भाग्य से, कोणीय पर कुछ छोटे कार्यक्रम पढ़ें। मैं कुछ खंड को जन्म देता हूं, जो आरक्षण के साथ काम करता है। टिम्लिड संतुष्ट हैं, मैं सदमे में हूं, और ऐसा लगता है कि बैकएंड पर कार्य बोर्ड पर दिखाई दिए ...
लेकिन नहीं। बहुत सारे बैक-एंडर्स हैं, उनके लिए पहले से ही कुछ कार्य हैं, और सामने एक अनपेक्षित फ़ील्ड है। एक नया कार्य, जो पहले से ही सीधे पोर्टल पर है, मुझे इस मामले को गंभीरता से लेने की अनुमति देता है। सहकर्मी मेरी पैंट को फाड़ने का प्रयास करते हैं और मुझे नाई की दुकान पर ले जाते हैं, और एक हफ्ते के लिए मैं कोणीय, टाइपस्क्रिप्ट, एनपीएम, वेबपैक और अन्य सामग्रियों पर पढ़ने में गोता लगाता हूं। वैसे, डायनासोर के लिए आधुनिक जावास्क्रिप्ट के बारे में लेख ने बहुत मदद की - https://habrahabr.ru/company/mailru/blog/340922/ ।
कुछ समय बाद, मैं एक नौकरानी की अनुपस्थिति में एक गेटकीपर की तरह महसूस करते हुए, साधारण फ्रंट-एंड कार्यों को बंद करने में सक्षम था। फिर भी फ्रंट-एंड के बारे में चुटकुलेबाजी करते हुए, मैं सुझाव देता हूं कि मेरे साथी बैक-बियरर एक साथ मिलें और मेरे केले-स्ट्रॉबेरी के अनुभव को सुनें। हर कोई हँसता है, लेकिन गुप्त रूप से हर कोई यह समझना चाहता है कि इस तेजी से सामने वाले (वास्तव में, नहीं) किस तरह की बुदबुदाहट हो रही है।
आगे की हलचल के बिना, मैं हेबर से उपरोक्त लेख को पुनः प्राप्त करता हूं, इसे मेरे कोणीय के बुनियादी ज्ञान के साथ सीज करता हूं। मिताप एक धमाके के साथ आते हैं, और बाद में, मैं ऐसे लोगों की एक श्रृंखला खर्च करता हूं - बैकएंड के लिए फ्रंट-एंड के बारे में, जो कि, हालांकि, हमारी कहानी के लिए इतना महत्वपूर्ण नहीं है। एकमात्र महत्वपूर्ण बात यह है कि उनके कार्यान्वयन ने मुझे फ्रंट-एंड प्रौद्योगिकियों के आधुनिक स्टैक के गहन अध्ययन के लिए प्रेरित किया।
खुजली
काम पर, सब कुछ निकला, पारिवारिक जीवन में एक शांत समय आ गया, और खुजली दिखाई दी। ऐसे, आप जानते हैं, छोटा, अभी भी काफी नाजुक है और अवचेतन की सीमा पर कहीं रहता है। विचार मेरे सिर में टिमटिमाते हैं, वे कहते हैं, तीन साल पहले, मैंने अपने शौक - प्रोग्रामिंग गेम्स करना लगभग पूरी तरह से बंद कर दिया था। लेकिन क्या होगा अगर आप ताजा ज्ञान और?
मैंने लंबे समय तक वेबजीएल को देखा, लेकिन पहले मैं इसका उपयोग करते हुए किसी भी मदद (टाइपिंग, ऑटो-पूरा) की कमी से भयभीत था। और यहां, कृपया - मांस में एक गैर-मौजूद चांदी की गोली, वही हथौड़ा, जब लिया जाता है , तो सब कुछ नाखून बन जाता है । टाइपप्रति।
मेरे लिए, एक व्यक्ति के रूप में जो कॉलबैक नरक के साथ दर्द जानता था, var self = this, bind (यह), अपरिभाषित कोई फ़ंक्शन नहीं है ... इसलिए, टाइपस्क्रिप्ट मुझे एक ताजा हवा की सांस भी नहीं लग रहा था, लेकिन एक नीली स्टारशिप पर एक तरह का विज़ार्ड, जो से उतर रहा है स्वर्ग, आलसी ने मुझे फेंक दिया - बेटा, सब कुछ भूल जाओ जो आप js के बारे में पहले जानते थे, और मैं आपको दिखाऊंगा कि खरगोश छेद कितना गहरा है। क्या सादृश्य अराजक होता है और सामान्य रूप से अन्य उपमाओं से किसी प्रकार का हॉजपोज़ होता है? सच है, टाइपस्क्रिप्ट खुद एक नज़र में।
क्लासेस, इंटरफेस, टाइपिंग, एसिंक्स, कॉम्प्लेक्शन एरर और टाइपो, कोड पूरा करना, टैम्बोरिन के बिना काम करना, बकवास-ए-स्कोप वैर को हतोत्साहित करने के बजाय समझने योग्य व्यवहार करना। बेशक, थोड़ी देर के बाद, मुझे एहसास हुआ कि इस खुशी का प्रायोजक टाइपस्क्रिप्ट बिल्कुल नहीं है, लेकिन जावास्क्रिप्ट ही, अपने आधुनिक संस्करण (ईएस 6 और ऊपर) में। लेकिन उस पल ऐसा लगा कि मुझे एक भविष्यवक्ता मिल गया है, जो एक उज्ज्वल व्यक्ति को आगे ले जाएगा, साम्यवादी भविष्य। डेवलपर के लिए Intellisense और सहायता के क्षेत्र में विभिन्न IDEs की गंभीर पर्याप्त प्रगति में जोड़ें, और शायद आप मेरे पिल्ला खुशी को समझेंगे।
बेबसी
मेरी सांस के तहत पहला गंभीर झटका टाइपस्क्रिप्ट ही था। एक रिक्त परियोजना के लिए इसे जकड़ने के प्रयासों ने मुझे समझा - मैं कोणीय और कोणीय-क्ली के बाहर एक लानत बात नहीं समझ सकता, जो मेरे लिए बहुत गंदा काम करते हैं। क्या मुझे एक कंपाइलर की आवश्यकता है? ठीक है, इसे package.json में स्क्रू करें, npm इंस्टॉल करें, tsc चलाएं और ... कुछ भी नहीं। आह, यह अभी तक विश्व स्तर पर स्थापित किया जाना चाहिए? इस सारे सामान के साथ अपने युद्ध के सुस्त विवरण को स्वीकार करते हुए, मैं कहता हूँ कि कुछ समय बाद मैंने main.ts को main.js. लेकिन मेरे आगे वेबपैक से उपद्रव हो रहा था।
हाँ, अब मुझे एहसास हुआ कि उसके बिना करना संभव था। लेकिन जब टाइपस्क्रिप्ट के अनाड़ी हाथों में, चारों ओर सब कुछ कोणीय-क्ली जैसा दिखता है। वेबपैक के कार्यान्वयन के बाद यह पहले से ही है कि मुझे पता है कि टाइपस्क्रिप्ट कंपाइलर स्वयं फाइलों में "मॉनिटर" करने में सक्षम है, जिससे कि आयात / निर्यात की समस्या वेबपैक के बिना हल हो सकती है।
पर काबू पाने
लगभग एक हफ्ते के बाद, मैं एक प्रोजेक्ट बनाने में सक्षम था, जिसमें मैंने टाइपस्क्रिप्ट कोड लिखा था, "सेव" पर क्लिक किया और सब कुछ जैसा कि होना चाहिए - वेबपैक ने स्वचालित रूप से मेरी सभी फ़ाइलों को एक बंडल में फिर से जोड़ दिया, पहले उनके लिए टाइपस्क्रिप्ट कंपाइलर चला, और फिर बिल्ड को ड्राप किया। एक अलग फ़ोल्डर जहाँ मैंने अन्य स्थिर चीज़ों की प्रतिलिपि बनाई, और उस क्षण में ब्राउज़र में सर्वर ने पृष्ठ को पुनः लोड किया। मैंने कहा कि सब कुछ अपने आप हो गया? नहीं, सब कुछ अपने आप हुआ। जॉय कोई सीमा नहीं जानता था, और मैं एक साधारण अखाड़ा शूटर लिखने के लिए बैठ गया।
कहां से शुरू होता है जन्मस्थल मेरे लिए खेल है? बेशक, गणित वैक्टर और मैट्रिस जैसी बुनियादी चीजों के साथ। मैंने सफलतापूर्वक काम के दौरान यहां संसूचित नहीं किया, लेकिन एक शौक में यह दूर नहीं हुआ। मैं तैयार पुस्तकालय नहीं चाहता था, इसलिए मैं अपना गणित लिखने बैठ गया। नहीं, यह बहुत जोर से कहा गया है। मैंने अपने पिछले FreePascal ढांचे ( https://github.com/perfectdaemon/tiny-glr/ ) को खोला और वहां से गणित में बदलाव करना शुरू कर दिया।
आगे देखते हुए, मेरा कहना है कि सामान्य तौर पर, मेरा पूरा नया ढांचा फ्री पास्कल से टाइपस्क्रिप्ट तक पुराने का रूपांतरण है। खेल देव में तीन साल से अधिक के अंतराल को देखते हुए, मैं बेहतर वास्तुकला के साथ नहीं आया, या यह भी याद कर सकता हूं कि अतीत के minuses क्या थे।
कुछ समय बाद, मैंने सांस छोड़ना शुरू कर दिया: प्रेरणा स्वाभाविक रूप से कम हो गई, काम का बोझ बढ़ गया। और फिर igdc पर एक और प्रतियोगिता की घोषणा की। और मेरा विश्वास करो, प्रतियोगिता एक उत्कृष्ट बाहरी प्रेरक है जो विषयगत, तकनीकी और समय सीमा निर्धारित करती है।
प्रतियोगिता
मैंने पहले ही अपने आखिरी लेख में कहा है कि क्या है पागलपन igdc , लेकिन मैं यहां संक्षेप में दोहराता हूं - यह एक ऐसा गर्म, दीपक समुदाय है जो किसी दिए गए विषय पर गेम विकसित करने के लिए छोटी या मध्यम लंबाई की प्रतियोगिता आयोजित करता है। नकद पुरस्कार, प्रसिद्ध प्रायोजकों और नौकरी की सुरक्षा की गारंटी के बिना। अरे हाँ, विज्ञापन के बिना भी, उत्साह और होस्टिंग और डोमेन के लिए स्वैच्छिक दान की भागीदारी के साथ। और इसलिए लगभग 15 वर्षों के लिए।
प्रतियोगिता थीम - कचरा गेम । ग्राफिक संसाधनों के व्यापक और विविध पैक को देखते हुए। प्रतिभागियों का कार्य केवल इसका उपयोग करके खेल बनाना है। शैली और विषय सीमित नहीं हैं, किसी भी ध्वनियों और संगीत के उपयोग की अनुमति है, क्योंकि केवल ग्राफिक्स पैक में हैं। एक ऐतिहासिक तकनीकी सीमा है जो सख्ती से ऑफ़लाइन लॉन्च करने से जुड़ी है, बिना इंस्टॉलर, डाउनलोड और बहुत कुछ।
उत्तरार्द्ध एक छोटी सी समस्या है, क्योंकि जब कोई उपयोगकर्ता स्थानीय रूप से एक html फ़ाइल खोलता है तो क्रोम और कंपनी बहुत सी चीजों को प्रतिबंधित करते हैं। WebGL चालू नहीं हो सकता है, स्क्रिप्ट खींचना नहीं चाहेंगे, ग्राफिक संसाधनों का उल्लेख नहीं करेंगे। एक रास्ता है - हम उपयोगकर्ता के लिए एक स्थानीय सुपर छोटा वेब सर्वर और एक स्टार्टअप स्क्रिप्ट बनाते हैं जो इसे उठाएगा और वांछित पते पर उपयोगकर्ता का पसंदीदा ब्राउज़र खोल देगा।
कार्य मुश्किल नहीं है, मैं C # में 6-किलोबाइट exe और पास में एक बैट-उपनाम मिला, जो सर्वर और पोर्ट के लिए रूट फ़ोल्डर को परिभाषित करता है।
लेकिन, एक छोटे और बड़े लक्ष्य के लिए इस छोटी बाधा के बारे में पर्याप्त है - प्रतियोगिता के लिए एक खेल लिखना।
प्रतियोगिता का खेल
संसाधनों को देखते हुए, मैंने महसूस किया कि उनके उपयोग के साथ अखाड़ा शूटर काफी ठोस हो जाएगा।
बुनियादी चीजों को पूरा करने के बाद, मैं अपनी जरूरत के संसाधनों के चयन के लिए आगे बढ़ा। एक बनावट एटलस के रूप में अंतिम टुकड़ा करना इस तरह दिखता है:

वैसे, एटलस पर बेक की गई कुछ चीजें खेल में कभी इस्तेमाल नहीं की जाती थीं। संसाधनों को लोड करने के बाद, मैंने खुद के लिए एक नया कार्यात्मक शुरू किया - स्प्राइट एनीमेशन। मैं एक बच्चे के रूप में खुश था जब सब कुछ बदल गया:

खुद की भौतिकी
अन्य लोगों की भौतिक विज्ञान को जोड़ने की मेरी खुद की खोज करने की अटूट इच्छा के साथ, कम से कम निन्दा करने वाला लग रहा था, और, यह मुझे लगता है, मेरे उत्साही जीव द्वारा भी नहीं माना गया था (मैं सिर्फ प्रेत को पराजित एनीमेशन, याद है?)। इसके अलावा, आयतों (एक्सिस-संरेखित बाउंडिंग बॉक्स, एएबीबी) और सर्कल के आधार पर सरल टकराव प्रसंस्करण में क्या मुश्किल हो सकता है? बहुत सारी चीजें। एक चरित्र को अदृश्य कोनों में फंसने से शुरू करना और इस तथ्य के साथ समाप्त करना कि आप अपनी दुनिया की सभी वस्तुओं को आयतों और हलकों में लाते हैं।
सभी समस्याओं को हल करना संभव नहीं था, लेकिन कुछ भौतिकी फिर भी दिखाई दी:

आवाज़
उम्मीद है कि यह मुश्किल होगा। वास्तव में, यह किसी भी तरह से संदिग्ध रूप से सरल और कुशल निकला। हमने एक ऑडियो संदर्भ बनाया, एक ऑडियो बफर बनाया, ब्राउज़र के लिए स्वीकार्य किसी भी प्रारूप में संगीत / ध्वनियों को रखा (मैंने wav का उपयोग किया), एक नोड बनाया और कहा कि किस बफर से खेलना है।
ध्वनियाँ मैंने bfxr ( https://www.bfxr.net/ ) का उपयोग करके उत्पन्न कीं।
हाकी
बैसाखी, तदर्थ निर्णय, पॉडचिवनिआ - ऐसे व्यक्ति को ढूंढना मुश्किल है जो इन शब्दों को केवल सुनकर जानते हैं। प्रतियोगिता के अंत तक, मैंने कुछ उल्लेखनीय बैकअप डाले।
कोई पाठ आउटपुट नहीं था - html का उपयोग किया गया
प्रतियोगिता के अंत तक, यह स्पष्ट हो गया कि मेरे पास पाठ के प्रतिपादन को इंजन में स्थानांतरित करने का समय नहीं होगा। बिना जनरेटर के भी। कई विकल्प थे, यहाँ चार मुख्य हैं:
- एक पारदर्शी 2 डी कैनवास पर पाठ का प्रतिपादन करना जो वेबलॉग के साथ कैनवास के ऊपर बैठता है।
- पाठ के बिना एक खेल बनाओ
- आवश्यक शब्दों को सेंकना और उन्हें स्प्राइट के रूप में उपयोग करें
- HTML में आउटपुट HUD
प्रतियोगिता की शर्तों के अनुसार, केवल प्रदान किए गए कस्टम पिक्सेल फ़ॉन्ट का उपयोग करना संभव था, इसलिए पहला विकल्प (एक 2 डी कैनवास पर पाठ प्रदान करना) छोड़ दिया गया था। केवल सिस्टम फोंट का उपयोग करके कैनवस को प्रस्तुत किया जा सकता है। फ़ॉन्टफेस के माध्यम से सीएसएस में लोड किए गए फ़ॉन्ट बेहद अस्थिर हैं।
पाठ के बिना खेलना एक महान और रचनात्मक विकल्प है। यह अफ़सोस की बात है कि उस समय रचनात्मकता के साथ मैं पहले से ही बुरा महसूस कर रहा था।
आवश्यक न्यूनतम शब्दावली बड़ी थी और परिसंपत्तियों के आकार को बढ़ाया। इसके अलावा, संख्याओं के प्रदर्शन के लिए अभी भी एक निश्चित तर्क की आवश्यकता थी।
और अंत में, हम असली बैसाखी के पास पहुंच गए, जिसका मैंने इस्तेमाल किया - मैंने बस एचयूडी को एचटीएमएल मार्कअप के रूप में कैनवस के तहत लागू किया, @ सीएफटी को सीएसएस से जोड़ा, और मानक डोम एपीआई (getElementById) के माध्यम से अपडेट का आयोजन किया।
खेल पुनः आरंभ करें - document.location.reload ()
जब एक खिलाड़ी की मृत्यु हो जाती है, तो वह या तो खेल को बंद करना चाहता है या फिर इसे शुरू करना चाहता है। दुर्भाग्यवश, यदि आप शुरू से ही कुछ रीस्टार्ट मैकेनिज्म के लिए उपलब्ध नहीं कराते हैं और खराब संगठित वर्गों के समूह में खेल की पूरी स्थिति को तोड़ देते हैं, तो आपको कोई अच्छा रिस्टार्ट नहीं मिलेगा। हमेशा एक जादुई जगह होगी जो शून्य पर रीसेट नहीं की गई है।
इस मामले में एक उत्कृष्ट बैसाखी में उल्लिखित डॉक्युमेंट.लोकेशन। लोड () हेडर के माध्यम से एक बैंलल पेज रीलोड था। अंतिम निर्माण के छोटे आकार (सभी संसाधनों सहित 300 केबी से कम) को देखते हुए और यह तथ्य कि खेल स्थानीय रूप से काम करता है, फिर से शुरू करने की गति को उपेक्षित किया जा सकता है।
क्या हुआ?
आप इसे यहाँ ऑनलाइन आज़मा सकते हैं: https://perfectdaemon.imtqy.com/151/index.html
रिपॉजिटरी से लिंक: https://github.com/perfectdaemon/ts-game
इस खेल के स्रोत कोड के साथ रिपॉजिटरी संस्करण: https://github.com/perfectdaemon/ts-game/releases/tag/0.1.0
निष्कर्ष एक सुखद अंत है।
अंत में, मैं WebGL + टाइपस्क्रिप्ट पर खेल के लेखन के व्यक्तिपरक पेशेवरों और विपक्षों को संक्षेप में बताना चाहूंगा।
आकर्षण आते हैं
- एक बार लिखें, हर जगह खेलें / डिबग करें। यह बहुत अच्छा है कि मैं सिर्फ गेम को imtqy.com पर रख सकता हूं, और कोई भी इसे किसी भी डिवाइस से ब्राउज़र के साथ खेल सकता है। स्वाभाविक रूप से कई आरक्षणों के साथ।
- कुछ सेटिंग्स के बाद और टाइपस्क्रिप्ट जोड़ने से, आधुनिक जेएस के साथ काम करना इतना बुरा नहीं है।
- संदर्भ बनाने के लिए सुविधाजनक (Win API और OpenGL की तुलना में)
- एक सुविधाजनक उपकरण (विजुअल स्टूडियो कोड) है, जो अच्छी तरह से प्लगइन्स से सुसज्जित है और समस्या क्षेत्रों के बारे में युक्तियों, स्निपेट्स और नोट्स के माध्यम से कोड लिखने में वास्तव में मदद करता है।
विपक्ष
- जावास्क्रिप्ट एक ही धागे में चलता है। और समस्या यह भी नहीं है कि आप अलग-अलग धाराओं में भौतिकी या तर्क पर विचार करना चाहते हैं। प्रोफाइलिंग से पता चला कि WebGL कॉल अवरुद्ध है, अर्थात वे कोड के निष्पादन से आगे बढ़ने से पहले वीडियो कार्ड ड्राइवर से वापस लौटने के लिए नियंत्रण की प्रतीक्षा करते हैं। हालांकि अधिकांश WebGL कॉल शून्य के अलावा कुछ भी नहीं लौटाते हैं। कई कार्यों के लिए डेस्कटॉप ओपनजीएल कार्यान्वयन (कुछ ड्राइवरों में) तुरंत नियंत्रण लौटाता है, जो प्रतिपादन गति को काफी बढ़ाता है।
- एक छोटा कदम बाएं / दाएं - और आप पूरी तरह से अकेले हैं। कोणीय और टाइपस्क्रिप्ट के साथ समस्या हो रही है? स्टैक ओवरफ्लो के पहले दो लिंक आपकी मदद करेंगे। टाइपस्क्रिप्ट के साथ अलग से दोस्त बनाने की इच्छा थी और एक अजीब बग / सवाल पैदा हुआ? इस तथ्य के लिए तैयार हो जाएं कि आप अकेले हो सकते हैं। बेशक, एक व्यक्ति के रूप में जो पहले FreePascal + OpenGL के बहुत लोकप्रिय (नहीं) स्टैक पर लिखा था, मैं इसका उपयोग करता था। लेकिन सी ++ जैसी परिपक्व भाषा के मामले में, हमेशा एक भारतीय होगा जो इस तरह की समस्या का समाधान कर चुका है। और फिर चीनी, जिन्होंने इसे गिटार हीरो और अरुडिनो से नियंत्रक का उपयोग करके हल किया।