การใช้แนวนอนแบบทำลายได้ 2D (เช่น Worms)


76

ขั้นตอนใดที่จะมีส่วนร่วมในการสร้างภูมิทัศน์ 2D แบบทำลายได้เช่นใน Worms? ในทางอุดมคติแล้วมีวิธีใดบ้างที่กระบวนการนี้จะทำให้มีประสิทธิภาพมากที่สุด


7
คำถามที่ยอดเยี่ยม Worms มีความท้าทายสองประการ: ความสามารถในการทำลายล้างและการเคลื่อนที่ของมุมแปลก ๆ
ashes999

ฉันคิดว่าสิ่งนี้ถูกถามที่นี่หลายครั้ง
พระนารายณ์

2
ค่อนข้างลิงก์ที่เกี่ยวข้องดูเหมือนจะไม่แนะนำ
The Duck คอมมิวนิสต์

3
คุณสามารถตรวจสอบวิธีการทำในHedgewars - มันเป็นโคลนเวิร์กโอเพนซอร์ส
GvS

ไม่เพียงพอสำหรับคำตอบ แต่คุณอาจต้องการตรวจสอบClonkเช่นกัน มันเป็นเกม 2 มิติที่เก่ากว่าโดยนักพัฒนาชาวเยอรมันที่มีภูมิทัศน์ที่ทำลายล้างได้จนถึงพิกเซลที่กำหนด มันไม่ได้อยู่ระหว่างการพัฒนาอีกต่อไป แต่มีซอร์สโค้ดอยู่ใต้ลิงค์ด้านบน นอกจากนี้ยังมีผู้สืบทอดโอเพ่นซอร์ส OpenClonk ด้วยเช่นกัน แต่จากวิดีโอที่ดูเหมือนว่าจะถูกย้ายออกไปจากการทำลายที่สมบูรณ์แบบของพิกเซลและหันไปในทิศทาง Terraria-esque ที่มีบล็อกที่สามารถทำลายได้
Christian

คำตอบ:


47

ฉันไม่รู้ว่าภูมิในเวิร์มนั้นถูกนำไปใช้อย่างไร แต่ฉันค่อนข้างแน่ใจว่าพวกเขาใช้บิตแมปสำหรับทิวทัศน์ (อย่างน้อยในเกมเก่าของซีรีส์)

วิธีการขั้นพื้นฐานมากจะเป็นภาพบิตแมป (B / W) ซึ่งพิกเซลสีดำแทนอากาศและพิกเซลสีขาวหมายถึงพื้นดิน การทำลายแนวนอนสามารถทำได้อย่างง่ายดายด้วยการใช้พิกเซล ดังนั้นหากจรวดชนกับพื้นให้ทาสีวงกลมสีดำด้วยradius = blastRadiusที่จุดปะทะ

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

แทนที่จะเป็นภาพขาวดำเป็น "แผนที่การชนกันของคุณ" คุณสามารถใช้ภาพ 24 บิตที่คุณใช้สองช่องทางเพื่อจัดเก็บพื้นผิวปกติ (x, y) ต่อพิกเซลและหนึ่งช่องทางในการจัดเก็บ "การชนกันจริง" แผนที่". การมีพื้นผิวเป็นปกติอยู่ในมือจะช่วยให้คุณคำนวณระเบิดได้อย่างมากหรือเพื่อพิจารณาว่าตัวละครสามารถเคลื่อนที่ในทิศทางที่กำหนดได้หรือไม่


3
การจัดเก็บข้อมูลเพิ่มเติมคือการชนกันของแผนที่เป็นความคิดที่สวยงาม
deft_code

6

ความเป็นไปได้อย่างหนึ่งจากยอดศีรษะของฉัน:

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


2
ฉันคิดว่านั่นเป็นวิธีที่ Hedgewars ทำ @ การเรียกเก็บเงินคุณสามารถดูได้เนื่องจากเป็น opensource
Gastón

2
@ Gastónแผนที่ใน Hedgewars เป็นภาพทั้งหมด (PNGs) ฉันสงสัยว่ามันถูกแปลงเป็นกราฟิกแบบเวกเตอร์ นอกจากนี้: การใช้กราฟิกแบบเวกเตอร์ (เส้นโค้ง, เบซิเยร์, ฯลฯ ) นั้นหนักกว่า CPU มากสำหรับสิ่งต่างๆเช่นการตรวจจับการชนหรือการลบรูปร่าง มองไปที่แหล่งที่มาเป็นความคิดที่ดีแม้ว่า (แม้ว่าการเข้ารหัสแบบค่อนข้างไม่ดี :))
bummzack

4
เรขาคณิตการคำนวณเช่นนี้จะมีความซับซ้อนมากเร็วมาก!
Adam Harte

Googling "ภูมิประเทศที่สามารถทำลายได้ box2d" ในขณะนี้ให้การสาธิตเวกเตอร์ที่รันได้สองสามรายการ
Ciro Santilli 新疆改造中心法轮功六四事件

6

ใช้รูปทรงเรขาคณิตที่เป็นของแข็งที่สร้างสรรค์

ฉันเขียนหลักฐานของแนวคิดที่ใช้รูปทรงเรขาคณิตที่เป็นของแข็งที่สร้างสรรค์เพื่อจัดการกับภูมิประเทศที่ถูกทำลาย ฉันใช้ GLU Tessellator เพื่อทำการบูลีน เอกสารอธิบายถึงวิธีการค้นหา"CSG ใช้สำหรับ Winding กฎ"

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

ขั้นตอนต่อไปใน PoC (ซึ่งฉันไม่เคยไปถึง) คือการใช้อัลกอริธึมSCCจากห้องสมุดกราฟเพิ่มเพื่อตรวจจับเมื่อชิ้นส่วนของภูมิประเทศถูกตัดขาด (ตัดด้านบนออกจากภูเขา) ภูมิประเทศที่ถูกทำลายจะยังคงถูกทำลาย แต่ตอนนี้แสดงโดยร่างกาย Box2D แบบไดนามิก (ไม่คงที่) ที่มีรูปสามเหลี่ยมที่แนบมาเป็นรูปร่าง ฉันมีการออกแบบที่ได้ผล แต่หมดความสนใจเมื่อฉันเริ่มขุดลงในเอกสารบูสต์ ฉัน"วางแผน"เพื่อทบทวนแนวคิดเมื่อฉันสร้างเกม Earth / Worms ที่ไหม้เกรียมสักวันหนึ่ง


5

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

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


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

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

มันตลกเพราะฉันคิดจะสร้างเกมแบบนี้จริง ๆ มันคงจะสนุกกับกลไกของ Worms ความคิดของบิตแมปที่แข็งเกร็งน่าจะเป็นหัวข้อที่น่าสนใจในตัวเองแน่นอนว่าความซับซ้อนนั้นอยู่เหนือหัวฉันนิดหน่อย
William Casarin

ในกรณีนี้บิตแมปตัวแข็งจะไม่ไปแทนฉันจะสร้างภูมิทัศน์เป็นจุดยอดสามเหลี่ยมสามจุดเชื่อมต่ออย่างยืดหยุ่น คุณเล่นโลกของสารที่หนาหรือไม่? ถ้าไม่ดูภาพหน้าจอ: vgchartz.com/games/pics/6644424aaa.jpg doublegames.de/images/screenshots/world-of-goo_1_big.jpg ไม่ไม่ไม่ถ้าคุณไม่ได้เล่นคุณต้องแน่นอน :) ลองจินตนาการว่าแทนที่จะเป็นลูกบอลหนาทุกสามเหลี่ยมแสดงส่วนหนึ่งของพื้นผิวภูมิทัศน์ของคุณและมันเล็กกว่ามาก ซอล้อมรอบด้วยค่าคงที่และภูมิทัศน์ของคุณจะค่อนข้างแข็งหรืออ่อนนุ่มเหมือนเยลลี่
Septagram

2
จะดูที่เป็นเครื่องมือทางกายภาพ เครื่องยนต์ทั้งหมดมีพื้นฐานมาจากความคิดที่ว่าทุกอย่างเป็นโครงตาข่ายที่เปลี่ยนรูป / ทำลายได้ (เช่นหอคอยแห่งสารที่หนา)
deft_code

3

ในฐานะที่เป็น bummzack พูด Bitmaps แม้ว่าคุณจะสามารถใช้แผ่นใส 1 บิตหรือหากคุณไม่มีตัวรองรับนั้นให้ใช้สีชมพูที่น่ากลัวที่คุณจะไม่ใช้ในเกม

สามารถคำนวณจุดกระทบได้เพียงตรวจสอบสีของพิกเซล และเมื่อผลกระทบเกิดขึ้นเปลี่ยนสี (หรือลบ) ของบิตแมป

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

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