3D कारें और बाइक कैसे प्रोग्राम करें (रेस और मोटोक्रॉस)
3D रेस और मोटोक्रॉस उदाहरणों के अंदर: वाहन की भौतिकी, पीछा करने वाला कैमरा, रास्ते के बिंदु (वे संख्याओं की सूचियाँ), प्रतिद्वंद्वी का ऑटोपायलट, लैप और पहाड़।
1. खिलाड़ी खुद वाहन बन जाता है
दोनों गेम में आप चलने वाले स्प्राइट को नियंत्रित नहीं करते: खिलाड़ी चलाए ब्लॉक 3D दुनिया के खिलाड़ी को कार या बाइक से बदल देता है।
• evt_bandeira • m3d_jog_veiculo [VEIC: carro, COR: #3B6FD8] • m3d_camera [MODO: perseguicao] • m3d_jog_vel [VEL: 4.3] • m3d_controles [MODO: sim]
अंदर, वाहन एक गति (आगे की वेग) रखता है और हर फ़्रेम में (एक सेकंड में 60 बार):
- W त्वरण जोड़ता है; S ब्रेक लगाता है (और रुके होने पर पीछे ले जाता है); कोई कुंजी न हो तो घर्षण कार को धीरे-धीरे रोकता है। यही जड़त्व का एहसास है।
- A/D दिशा मोड़ते हैं, लेकिन मुड़ना गति के अनुपात में होता है: रुकी हुई कार नहीं मुड़ती (असली कार की तरह)।
- गति आगे के कदम में बदलती है: x में sine(दिशा) × गति का और z में −cosine(दिशा) × गति का बदलाव होता है।
- 1 ब्लॉक की सीढ़ी पर वाहन चढ़ जाता है; दीवार पर गति खोता है और जब खिलाड़ी का वाहन टकराए चलाता है।
- बाइक ज़्यादा तेज़ी पकड़ती है, जल्दी मुड़ती है और स्पेस से कूदती है; यह मोड़ों पर झुकती है और इसके पहिये गति के साथ घूमते हैं।
पीछा कैमरा वाहन के पीछे रहता है और थोड़ी देरी से मुड़ता है (यह कार की दिशा का "पीछा" करता है), इसलिए मोड़ सहज दिखते हैं।
2. प्रतिद्वंद्वी: ये संख्याएँ क्या हैं?
किसी प्रतिद्वंद्वी में आपको ऐसी सूची दिखेगी:
36, 41, 46.1, 51.1, 56.2, 61.2, 66.3, 71.3, 76.4, 81.6, 86.6, 91, 94.3, 96.4, 97, 96.1, 93.9, 90.3, 85.9, 80.8, 75.6, 70.5, 65.5, 60.4, 55.4, 50.3, 45.3, 40.2, 35.2, 30.1, 25, 19.8, 15.1, 11.2, 8.5, 7.1, 7.3, 8.8, 11.8, 15.8, 20.6, 25.9, 31
ये हरे प्रतिद्वंद्वी के रास्ते के बिंदुओं (waypoints) के x निर्देशांक हैं। एक दूसरी सूची, path Z, में z निर्देशांक हैं। हर सूची की पहली संख्या बिंदु 1 है, हर सूची की दूसरी संख्या बिंदु 2, और इसी तरह आगे: ट्रैक के चारों ओर 43 बिंदु, ब्रेड के टुकड़ों की तरह।
सूची पढ़ें और आपको उसमें ट्रैक दिखेगा:
- 36 → 91 5-5 करके बढ़ता है: ऊपर का सीधा हिस्सा, कार दाईं ओर जा रही है (x बढ़ रहा है)।
- 94.3 → 97 → 85.9 धीरे-धीरे बढ़ता है, 97 (सबसे दायाँ बिंदु) तक पहुँचता है और वापस आता है: दायाँ मोड़ (आधा वृत्त)। मोड़ में x कम बदलता है, क्योंकि कार z में ज़्यादा चलती है।
- 80.8 → 15.1 5-5 करके घटता है: नीचे का सीधा हिस्सा, वापस बाईं ओर।
- 11.2 → 7.1 → 31: बायाँ मोड़ (7.1 सबसे बायाँ बिंदु है) और वापस शुरुआत के पास।
ये कहाँ से आए? ट्रैक एक "स्टेडियम" अंडाकार है: 52 ब्लॉक के दो सीधे हिस्से और 18 त्रिज्या वाले दो आधे वृत्त (कुल लगभग 217 ब्लॉक)। प्रोग्राम उस पर चला और हर ~5 ब्लॉक पर एक बिंदु लिखा (217 ÷ 5 ≈ 43)। सीधे हिस्सों पर यह बस जोड़ता है; मोड़ों में cosine और sine का उपयोग करता है (x = केंद्र + त्रिज्या × cos(कोण))। हर प्रतिद्वंद्वी एक अलग लेन में चलता है (थोड़ा अंदर या बाहर), इसलिए तीनों सूचियाँ मिलती-जुलती हैं पर एक जैसी नहीं। सूचियाँ अल्पविराम से अलग किए गए टेक्स्ट के रूप में रखी जाती हैं और टेक्स्ट को "," से बाँटो ब्लॉक टेक्स्ट को सूची में बदल देता है।
3. ऑटोपायलट (प्रतिद्वंद्वी के ब्लॉक)
• evt_bandeira
• m3d_corpo [FORMA: carro, COR: #3E9E3A, TAM: 100]
• m3d_corpo_fisica [MODO: sim]
• var_definir [VAR: caminhoX, VALOR: (arr_dividir)]
• var_definir [VAR: caminhoZ, VALOR: (arr_dividir)]
• var_definir [VAR: ponto, VALOR: 1]
• evt_receber
• ctl_repetir_ate [COND: (op_maior)]
• m3d_corpo_dirigir [X: (arr_item), Z: (arr_item), VEL: 12]
• ctl_se [COND: (op_menor)]
• var_adicionar [VAR: ponto, VALOR: 1]
• ctl_se [COND: (op_maior)]
• var_definir [VAR: ponto, VALOR: 1]
• var_adicionar [VAR: voltas, VALOR: 1]- x z तक गति से चलाओ कार को मौजूदा बिंदु की ओर थोड़ा-सा मोड़ता है (स्टीयरिंग व्हील की तरह) और चलाता है। यह टेलीपोर्ट नहीं करता, इसलिए अच्छे मोड़ बनते हैं।
- जब x z से मेरी दूरी 3.5 ब्लॉक से कम हो, तो प्रतिद्वंद्वी पहुँच गया और अगले बिंदु पर जाता है (बिंदु + 1)।
- आखिरी बिंदु पार हो गया? वापस बिंदु 1 पर और एक लैप जोड़ो।
- 3 लैप के बाद यह "पूरा कर चुके प्रतिद्वंद्वी" में 1 जोड़ता है। जब आप लाइन पार करते हैं, तो आपकी स्थिति "पूरा कर चुके प्रतिद्वंद्वी + 1" होती है।
अलग-अलग गतियाँ (12 / 12.6 / 13.2) प्रतिद्वंद्वियों को अलग-अलग स्तर देती हैं। ज़्यादा कठिन प्रतिद्वंद्वी चाहिए? उसकी गति बढ़ाएँ।
4. अपना ट्रैक बनाएँ और गाड़ी चलाकर रास्ता रिकॉर्ड करें
गणित की ज़रूरत नहीं! अपने ट्रैक पर कार चलाएँ और एक स्क्रिप्ट को हर आधे सेकंड में बिंदु लिखने दें:
• evt_tecla [TECLA: g] • var_definir [VAR: caminhoX, VALOR: (arr_vazia)] • var_definir [VAR: caminhoZ, VALOR: (arr_vazia)] • ctl_repetir [VEZES: 60] • arr_adicionar [VALOR: (m3d_jog_pos), VAR: caminhoX] • arr_adicionar [VALOR: (m3d_jog_pos), VAR: caminhoZ] • ctl_esperar [SEG: 0.5]
फिर मंच पर caminhoX और caminhoZ चर दिखाएँ (या "कहो" का उपयोग करें) और उन संख्याओं को प्रतिद्वंद्वियों में इस्तेमाल करें।
5. लैप, घास और टक्कर (आपकी कार)
- बिना बेईमानी के लैप गिनना: लैप तभी गिना जाता है जब आप ट्रैक के बीच (नीचे का सीधा हिस्सा) से और फिर चेकर्ड लाइन से गुज़रे हों। इसलिए आप लाइन पर आगे-पीछे नहीं कर सकते।
- घास आपको धीमा करती है: गेम कार के नीचे वाला ब्लॉक जाँचता है (y − 0.5)। अगर वह घास है, तो गति घट जाती है।
• ctl_sempre
• ctl_se_senao [COND: (op_igual)]
• m3d_jog_vel [VEL: 2.4]
…:
• m3d_jog_vel [VEL: 4.3]- समय और सबसे अच्छा लैप टाइमर ब्लॉक (संवेदन) का उपयोग करते हैं, जो सटीक है। 0.1 s रुककर 0.1 जोड़ना पीछे रह जाता है, क्योंकि हर दोहराव में थोड़ा ज़्यादा समय लगता है।
6. बाइक और पहाड़
पहाड़ कोड से बनाया गया था: रास्ता बाएँ से दाएँ चढ़ता है और उसकी ऊँचाई लगभग 8 + x × 0.2 है (हर 5 पर 1 ब्लॉक ऊपर)। प्रोग्राम यह पक्का करता है कि रास्ता एक स्तंभ से अगले तक कभी भी 1 ब्लॉक से ज़्यादा न चढ़े, नहीं तो बाइक फँस जाएगी। एक तरफ़ चट्टान की दीवार है (ताकि आप रास्ते पर रहें) और दूसरी तरफ़ खाई।
• evt_bandeira
• m3d_jog_veiculo [VEIC: moto, COR: #FF8C1A]
• m3d_camera [MODO: perseguicao]
• ctl_sempre
• ctl_se [COND: (op_menor)]
• m3d_jog_inicio
• ctl_se [COND: (op_maior)]
• m3d_jog_marcar- गिर गए? अगर बाइक रास्ते से काफ़ी नीचे है (4 + x × 0.2 से कम), तो वह आखिरी चेकपॉइंट पर लौट जाती है।
- चेकपॉइंट: पीले खंभे के पार (x 41 से ज़्यादा), जहाँ खिलाड़ी है वहाँ शुरुआती बिंदु सेट करो नई शुरुआत वहीं सहेज देता है।
- साइड कैमरा: C दबाएँ। कैमरा पहाड़ को बगल से देखता है, हिल-क्लाइंब गेम की तरह।
7. चुनौतियाँ
- 8 के आकार का ट्रैक बनाएँ और गाड़ी चलाकर प्रतिद्वंद्वियों का रास्ता रिकॉर्ड करें (भाग 4)।
- एक टर्बो बनाएँ: Shift दबाने पर 2 सेकंड के लिए "खिलाड़ी की गति 6"।
- मोटोक्रॉस में एक "भूत" प्रतिद्वंद्वी जोड़ें जो रास्ते के बिंदुओं का पीछा करे।
- कैमरे को ऊपर से पर बदलें और रिमोट-कंट्रोल कार वाला गेम बनाएँ।