2 डी हेलीकाप्टर खेल, गलियारे की दीवारें कैसे बनाएं?


12

मैं क्लासिक "हेलिकॉप्टर" गेम (यानी http://www.addistinggames.com/helicopter.html ) को अपनाने के बारे में सोच रहा हूं , लेकिन मुझे अभी तक यह पता नहीं चला है कि दीवारों के निर्माण का इंजन कैसे बनाया जाता है।

स्यूडोकोड में कोई संकेत? मुझे बीच में वस्तुओं में इतनी दिलचस्पी नहीं है- केवल एक तरह से पक्षों को उत्पन्न करने की कार्यप्रणाली जो कठिनाई के साथ बढ़ती है (अधिक में बंद हो जाती है, अधिक अप्रत्याशित घटता है) क्योंकि खेल आगे बढ़ता है।


1
इसके अलावा- स्पष्ट करने के लिए, मुझे दीवारों को ब्लॉकी से अधिक सुडौल बनाने की जरूरत है, क्योंकि वे वास्तव में "पानी की लहरें"
होंगी

1
बस ब्लॉक के रूप में करते हैं, लेकिन प्रत्येक के बीच चिकनी प्रक्षेप।
गुस्तावो मैकिएल

जवाबों:


17

आप उस के लिए 1D पेरलिन शोर का उपयोग कर सकते हैं । यहाँ 2 डी शोर की एक छवि है। मैंने नमूने लिए, जहां लाल रेखा है और उन्हें हरित रेखा के साथ कुछ गुणा करने के लिए गुणा किया है।

1 डी अनुभाग के साथ 2 डी शोर

आप जिस मान को बढ़ाते हैं, वह निरंतर शोर की ऊंचाई निर्धारित करता है। तो आप आसानी से कठिनाई को दूर कर सकते हैं। पेर्लिन शोर का एक अन्य लाभ यह है कि यह टिलिबल शोर उत्पन्न कर सकता है, ताकि आप एक उचित स्तर का निर्माण कर सकें।

यदि आप एक नीचे और एक छत बनाना चाहते हैं, तो यह महत्वपूर्ण है कि आप कोई अभेद्य क्षेत्र उत्पन्न न करें। सबसे आसान तरीका बस शोर के "ऊपरी" भाग का उपयोग करना होगा (जैसे। 1.0 - noiseValue) छत के रूप में और निचला भाग ( noiseValue) नीचे के लिए (पाठ्यक्रम के बीच में कुछ ऑफसेट के साथ)। यदि वह बहुत सुस्त लग रही है, तो आप दो करीबी नमूनों पर भी विचार कर सकते हैं, जैसे। एक या दो पिक्सेल ऊपर या नीचे एक और लाल सैंपल लाइन की कल्पना करें। यह एक समान, लेकिन समान लहर नहीं देगा।


वाह, यह एक ऐसी मदद थी! धन्यवाद :) मैं फ्लैश / एक्टिविटीस्क्रिप्ट में विकसित कर रहा हूं- और मैं देखता हूं कि एक बिल्ट-इन परलिनोइस फंक्शन है ... इसके साथ खेलेंगे और देखेंगे कि यह कैसे चलता है :)
davidkomer

@davidkomer मुझे खुशी है कि यह उपयोगी है। फ्लैश में आपको एक BitmapDataऑब्जेक्ट बनाना होगा और उसके perlinNoiseफ़ंक्शन का उपयोग करना होगा। बिटमैप 800x3 पिक्सेल या कुछ चरम हो सकता है, तो आप बस ऊपर और नीचे लाइन मान निकाल सकते हैं (कुछ ऐसा (bitmap.getPixel(x,y) & 0xff) / 255.0होना चाहिए जो आपको 0..1रेंज में मान दे ।
bummzack

हम्म- मुझे यह काम मिल गया, लेकिन निरंतर / गुणक मानों को अगम्य क्षेत्रों में धकेल देता है ... यहाँ मेरा कोड है, कोई विचार? (vect 32 बिट मानों का एक वेक्टर है, जिसे perlin शोर की रेखा से नमूना किया जाता है ... इसलिए y_val स्केलर द्वारा केवल नीले चैनल को गुणा किया जाता है) (idx = 0; idx <vect.length; idx ++) {y_val = (vect) [idx] & 0xFF) * स्केलर; drawData.fillRect (नया आयत (idx, drawData.height - y_val, 1, y_val), 0x0000ff); drawData.fillRect (नया आयत (idx, 0, 1, y_val), 0x0000ff); }
दाविदकोमर

मैं अभी के लिए दौड़ना चाहता हूं- लेकिन कुछ मुझे बताता है कि मुझे सिर्फ आपकी टिप्पणियों को अधिक ध्यान से पढ़ने की आवश्यकता है;) यह वह जगह है जहां मैं अभी तक
हूं-

क्या है scaler? आपके द्वारा प्राप्त मूल्य 0..255आपके कोड की सीमा में होंगे ।
बुमज़ैक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.