ขั้นตอนใดที่จะมีส่วนร่วมในการสร้างภูมิทัศน์ 2D แบบทำลายได้เช่นใน Worms? ในทางอุดมคติแล้วมีวิธีใดบ้างที่กระบวนการนี้จะทำให้มีประสิทธิภาพมากที่สุด
ขั้นตอนใดที่จะมีส่วนร่วมในการสร้างภูมิทัศน์ 2D แบบทำลายได้เช่นใน Worms? ในทางอุดมคติแล้วมีวิธีใดบ้างที่กระบวนการนี้จะทำให้มีประสิทธิภาพมากที่สุด
คำตอบ:
ฉันไม่รู้ว่าภูมิในเวิร์มนั้นถูกนำไปใช้อย่างไร แต่ฉันค่อนข้างแน่ใจว่าพวกเขาใช้บิตแมปสำหรับทิวทัศน์ (อย่างน้อยในเกมเก่าของซีรีส์)
วิธีการขั้นพื้นฐานมากจะเป็นภาพบิตแมป (B / W) ซึ่งพิกเซลสีดำแทนอากาศและพิกเซลสีขาวหมายถึงพื้นดิน การทำลายแนวนอนสามารถทำได้อย่างง่ายดายด้วยการใช้พิกเซล ดังนั้นหากจรวดชนกับพื้นให้ทาสีวงกลมสีดำด้วยradius = blastRadius
ที่จุดปะทะ
จากนั้นคุณสามารถสร้างโลกของคุณ (หรือเพียงบางส่วน) โดยใช้บิตแมปนั้น เพื่อประสิทธิภาพที่ดีกว่าฉันแนะนำให้คุณใช้งานในทางที่คุณสามารถอัปเดต / แสดงผลเพียงส่วนหนึ่งของ "โลก" เช่น. หากบางส่วนของภูมิประเทศถูกทำลายโดยจรวดเพียงแสดงพื้นที่ที่ได้รับผลกระทบใหม่ไม่ใช่โลกทั้งใบ
แทนที่จะเป็นภาพขาวดำเป็น "แผนที่การชนกันของคุณ" คุณสามารถใช้ภาพ 24 บิตที่คุณใช้สองช่องทางเพื่อจัดเก็บพื้นผิวปกติ (x, y) ต่อพิกเซลและหนึ่งช่องทางในการจัดเก็บ "การชนกันจริง" แผนที่". การมีพื้นผิวเป็นปกติอยู่ในมือจะช่วยให้คุณคำนวณระเบิดได้อย่างมากหรือเพื่อพิจารณาว่าตัวละครสามารถเคลื่อนที่ในทิศทางที่กำหนดได้หรือไม่
ความเป็นไปได้อย่างหนึ่งจากยอดศีรษะของฉัน:
ใช้การแทนค่าเส้นทางกราฟิกแบบเวกเตอร์สำหรับจัดเก็บเค้าโครงของ "ที่ดิน" ที่ถูกทำลาย เมื่อมีเหตุการณ์การทำลายเกิดขึ้น (เช่นระเบิดมือออก) พื้นที่การระเบิดที่แสดงเป็นวงกลมจะถูกลบออกจากเส้นทางบกผ่านการลบแบบบูล เส้นทางที่เป็นผลลัพธ์หมายถึง "ที่ดิน" ใหม่สำหรับการตรวจจับการชนกันของพื้นดินและอาจเป็นหน้ากากสำหรับการวาดภาพพื้นดิน
ฉันเขียนหลักฐานของแนวคิดที่ใช้รูปทรงเรขาคณิตที่เป็นของแข็งที่สร้างสรรค์เพื่อจัดการกับภูมิประเทศที่ถูกทำลาย ฉันใช้ GLU Tessellator เพื่อทำการบูลีน เอกสารอธิบายถึงวิธีการค้นหา"CSG ใช้สำหรับ Winding กฎ"
ฉันป้อนสามเหลี่ยมออกของ tessellator เป็นรูปหลายเหลี่ยมคงที่ใน Box2D PoC ทำงานได้ค่อนข้างดี ฉันสามารถลบและเพิ่มภูมิประเทศตามเวลาจริงโดยพลการและภูมิประเทศยังคงทำงานอย่างเหมาะสมกับ Box2D อาการสะอึกที่แท้จริงเพียงอย่างเดียวคือ GLess tessellator สามารถสร้างสามเหลี่ยมที่แย่ลงซึ่ง Box2D ไม่ชอบดังนั้นฉันจึงต้องกรองมันด้วยมือ
ขั้นตอนต่อไปใน PoC (ซึ่งฉันไม่เคยไปถึง) คือการใช้อัลกอริธึมSCCจากห้องสมุดกราฟเพิ่มเพื่อตรวจจับเมื่อชิ้นส่วนของภูมิประเทศถูกตัดขาด (ตัดด้านบนออกจากภูเขา) ภูมิประเทศที่ถูกทำลายจะยังคงถูกทำลาย แต่ตอนนี้แสดงโดยร่างกาย Box2D แบบไดนามิก (ไม่คงที่) ที่มีรูปสามเหลี่ยมที่แนบมาเป็นรูปร่าง ฉันมีการออกแบบที่ได้ผล แต่หมดความสนใจเมื่อฉันเริ่มขุดลงในเอกสารบูสต์ ฉัน"วางแผน"เพื่อทบทวนแนวคิดเมื่อฉันสร้างเกม Earth / Worms ที่ไหม้เกรียมสักวันหนึ่ง
คำตอบทั้งหมดข้างต้นพูดคุยเกี่ยวกับการใช้กรณีที่ง่ายที่สุดเช่นเดียวกับในหนอน นั่นคือเมื่อพื้นที่ของผลกระทบถูกทำลายและทุกสิ่งทุกอย่างไม่ได้ถูกแตะต้อง คุณได้พิจารณาแล้วหรือไม่ว่าภูมิทัศน์ของคุณอาจถูกแยกเป็นสองส่วนในที่สุด? บอกว่ามีภูเขาและผู้เล่นตัดก้นจรวดด้วยตัวปล่อยจรวด ตอนนี้ภูเขาไม่ควรเหรอ? นอกจากนี้ยังเป็นธรรมชาติสำหรับภูมิทัศน์ที่จะยืดหยุ่นเล็กน้อย ในช่วงเวลาของ Worms (อย่างน้อยที่สุดเท่าที่ฉันจำได้ฉันไม่ได้เล่น Worms เป็นเวลาหลายปี) คอมพิวเตอร์ไม่แข็งแรงพอที่จะทำถูกต้อง แต่ตอนนี้พวกเขาอยู่
แน่นอนมันขึ้นอยู่กับความทะเยอทะยานของโครงการของคุณ แต่ถ้าคุณต้องการให้มันยอดเยี่ยมจริงๆคุณอาจลองใช้Box2Dเป็นเครื่องมือทางฟิสิกส์ มีหลายสิ่งที่คุณสามารถทำได้
ในฐานะที่เป็น bummzack พูด Bitmaps แม้ว่าคุณจะสามารถใช้แผ่นใส 1 บิตหรือหากคุณไม่มีตัวรองรับนั้นให้ใช้สีชมพูที่น่ากลัวที่คุณจะไม่ใช้ในเกม
สามารถคำนวณจุดกระทบได้เพียงตรวจสอบสีของพิกเซล และเมื่อผลกระทบเกิดขึ้นเปลี่ยนสี (หรือลบ) ของบิตแมป
สำหรับรัศมีการระเบิดจุดแรกของฉันคืออัลกอรึทึมวงกลมของเบรสเซนอย่างรวดเร็วและมีประสิทธิภาพ แม้ว่าฉันจะลบ rought ก่อนด้วยบางสิ่งบางอย่างเช่นสี่เหลี่ยมจัตุรัสแล้วใส่วงกลมล้อมรอบมันเพื่อให้ได้ขอบ