การสร้างภูมิประเทศสำหรับ platformer 2D ที่ใช้กระเบื้อง


15

ขณะนี้ฉันกำลังทำงานกับ platformer 2D ที่ใช้กระเบื้องคล้ายกับ Terraria ในบางวิธีแม้ว่าฉันจะมีปัญหากับการสร้างภูมิประเทศ ฉันมีพื้นฐานบางอย่างที่ทำแม้ว่าพวกเขาจะไม่ออกมาเป็นสิ่งที่มีประโยชน์

ฉันได้ลองใช้เทคนิคที่แตกต่างกันสองสามอย่างเช่น Perlin Noise และอ่านเกี่ยวกับเทคนิคอื่น ๆ เช่น Midpoint Displacement ถึงแม้ว่าฉันไม่แน่ใจว่าสิ่งใดจะดีที่สุดหรือผสมผสานเทคนิคต่าง ๆ เพื่อสร้างพื้นที่ที่แตกต่างกัน (เช่น Midpoint Displacement สำหรับรูปร่างทั่วไปของภูมิประเทศและ Perlin Noise สำหรับถ้ำ)

ฉันได้พบคำอธิบายที่ยอดเยี่ยมว่าฉันจะเพิ่มเลเยอร์ให้กับมันได้อย่างไร Accidental Noise Library ได้อย่างไรแม้ว่ามันจะอยู่ใน C ++ และฉันไม่รู้ C ++ มากพอที่จะรวบรวมมันเป็น DLL ที่ฉันสามารถใช้จาก C # ฉันพยายามคัดลอกสิ่งนี้ใน C # ถึงแม้ว่าฉันไม่ทราบว่าฉันจะรวมเอฟเฟกต์สองอย่างเข้าด้วยกันได้อย่างไร (การไล่ระดับสีสำหรับฐานทั่วไปแล้วเศษส่วนเพื่อดูรายละเอียด)

ขณะนี้ฉันกำลังใช้เศษส่วนพลาสม่าและผลลัพธ์มีความหลากหลายอย่างมาก ตัวอย่างเช่นมันสามารถสร้างภูมิประเทศที่ไม่มีพื้นผิวใด ๆ หรือมันสามารถสร้างภูมิประเทศที่ไม่มีพื้นผิวเลย

ตัวอย่างของแผนที่โอเคน่าจะดีขึ้นหากมีการปรับปรุงเพิ่มเติม (สีดำเป็นของแข็งสีขาวคืออากาศ):

แผนที่ดี

และตัวอย่างของแผนที่ที่แย่มาก (สีดำเป็นของแข็งสีขาวคืออากาศ):

แผนที่แย่มาก

โดยทั่วไปสิ่งที่ฉันขอคือสิ่งที่จะเป็นวิธีที่ดีกว่าในการสร้างภูมิประเทศหรือบังคับให้ตรวจสอบให้แน่ใจว่ามีพื้นที่ผิวจำนวนพอสมควรโดยมีเวลาในการสร้างเร็วที่สุด หรืออีกวิธีหนึ่งที่ฉันจะสามารถบรรลุผลเช่นเดียวกับห้องสมุดเสียงอุบัติเหตุ แต่ใน C #

ตัวอย่างใด ๆ จะได้รับการชื่นชมอย่างมาก


สวัสดีฉันสงสัยว่าคุณทำสิ่งนี้อย่างไร ฉันพยายามทำความเข้าใจกับวิธีการสร้างโลกเช่นนี้และฉันชอบผลลัพธ์ที่คุณได้รับ คุณใช้อัลกอริธึมแบบใดเพราะมันไม่ได้มีลักษณะเหมือนเสียงเพอร์ลิน 2 มิติและมันก็ไม่ได้เป็นเสียงเพอร์ลิน 1D
G3tinmybelly

คำตอบ:


8

ฉันจะลองแปะกับเสียงเพอร์ลิน แต่เพิ่มน้ำหนักตามความสูงเพื่อให้แน่ใจว่าความหนาแน่นเฉลี่ยที่ระดับความสูงบางอย่าง หากต้องการอ้างอิงส่วนหนึ่งของโพสต์ของ Notch เกี่ยวกับการสร้างภูมิประเทศ Minecraft :

ดังนั้นฉันจึงเปลี่ยนระบบให้เป็นระบบที่คล้ายกันโดยใช้เสียง 3D Perlin แทนที่จะสุ่มตัวอย่าง "ความสูงของพื้นดิน" ฉันถือว่าค่าเสียงเป็น "ความหนาแน่น" โดยที่สิ่งใดก็ตามที่ต่ำกว่า 0 จะเป็นอากาศและสิ่งที่สูงกว่าหรือเท่ากับ 0 จะเป็นดิน เพื่อให้แน่ใจว่าชั้นล่างแข็งและด้านบนไม่ได้ฉันแค่เพิ่มความสูง (ชดเชยด้วยระดับน้ำ) ไปยังผลลัพธ์ที่สุ่มตัวอย่าง

โดยพื้นฐานแล้วคุณใช้พื้นที่ Minecraft เป็นชิ้นเล็ก ๆ ดังนั้นสร้างเสียงเพอร์ลิน 2D แต่ให้น้ำหนักเพื่อว่าสิ่งใดที่อยู่เหนือจุดใดจุดหนึ่งน่าจะเป็นอากาศและสิ่งใดก็ตามที่อยู่ด้านล่างของจุดหนึ่งน่าจะเป็นโลก

สิ่งนี้จะให้ภูมิประเทศที่ดีแก่คุณพร้อมด้วยสิ่งที่แขวนอยู่และสิ่งที่น่าสนใจรวมถึงถ้ำและเกาะลอย (หากคุณไม่ต้องการเกาะลอยคุณสามารถทดสอบและลบออกได้ด้วยตนเอง) วิธีนี้จะไม่ให้สิ่งต่าง ๆ เช่นอุโมงค์ดังนั้นคุณจึงต้องการวิธีเพิ่มสิ่งเหล่านี้ในยุคหลังภูมิประเทศเช่นสุ่มเดิน


ไม่แน่ใจทั้งหมดว่าฉันใช้ Perlin Noise กับมันเต็มศักยภาพ หลังจากทำอย่างที่คุณอธิบายแล้วมันเป็นถ้ำจำนวนมากที่มีเกาะลอยจำนวนมาก ไม่มีคำจำกัดความประเภทภูมิประเทศจริง การใช้การไล่ระดับสีเพื่อชั่งน้ำหนักผลลัพธ์ฉันได้ผลลัพธ์นี้
ขนาดที่แรเงา

@Shaded Dimensions - พารามิเตอร์ Perlin Noise ของคุณจำเป็นต้องมีการปรับแต่ง คุณมีเสียงรบกวนที่แปรปรวนอย่างมากเมื่อสิ่งที่คุณต้องการเป็นรูปแบบที่ราบรื่นและกว้างขึ้น ลองดูfreespace.virgin.net/hugo.elias/models/m_perlin.htmแล้วลองใช้พารามิเตอร์ต่างๆดู ลองใช้ความคงทนที่น้อยลงและลดเลอะเลือนให้น้อยลง (ข้อกำหนดเหล่านี้อาจแตกต่างกันไปดังนั้นอ่านบทความนั้น)
dlras2

โอเคขอบคุณสำหรับลิงค์ ฉันยังพบว่าน้ำหนักไม่ทำงานตามที่ตั้งใจไว้หลังจากเปลี่ยนพารามิเตอร์บางอย่าง
ขนาดเงาใน

เอาล่ะปรับเปลี่ยนพารามิเตอร์ได้เล็กน้อยและฉันได้รับบางสิ่งบางอย่างที่ค่อนข้างเป็นที่ยอมรับสำหรับตอนนี้อย่างน้อย ฉันยังลบการสร้างถ้ำเพียงเพื่อการทดสอบนี้เนื่องจากฉันต้องการให้ภูมิประเทศจริงเสร็จก่อน นี่คือผลสุดท้าย เพียงแค่ต้องเพิ่มการตรวจสอบเพื่อลบเกาะลอยเหล่านั้น ขอบคุณอีกครั้ง.
ขนาดเงาใน

@ ขนาดเงา - ดีมาก! มีเวลามากมายภูมิประเทศที่ดีมาจากการปรับแต่งพารามิเตอร์และเสียงซ้อนทับ ใช้เวลาสักครู่ก่อนที่คุณจะได้รับสิ่งที่คุณมีความสุขมาก แต่คุณสามารถใช้สิ่งที่คุณมีอยู่ตอนนี้และกลับมาเพื่อเพิ่มการปรับแต่งที่สมบูรณ์ได้ โชคดี!
dlras2
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.