วิธีเก็บระดับ shmup


12

ฉันกำลังพัฒนา shmup 2D (เช่นAero Fighters ) และฉันสงสัยว่ามีวิธีการอะไรหลายวิธีในการจัดเก็บระดับ สมมติว่าศัตรูถูกกำหนดในไฟล์ xml ของตัวเองคุณจะกำหนดอย่างไรเมื่อศัตรูวางไข่ในระดับ

มันจะขึ้นอยู่กับเวลา? อัพเดท? ระยะทาง?

ขณะนี้ฉันทำตาม "ระดับเวลา" (จำนวนเวลาที่ระดับกำลังทำงานอยู่การหยุดชั่วคราวจะไม่อัปเดตเวลา) นี่คือตัวอย่าง (การทำให้เป็นลำดับโดย XNA):

<?xml version="1.0" encoding="utf-8"?>
<XnaContent xmlns:level="pekalicious.xanor.XanorContentShared.content.level">
  <Asset Type="level:Level">
    <Enemies>
      <Enemy>
        <EnemyType>data/enemies/smallenemy</EnemyType>
        <SpawnTime>PT0S</SpawnTime>
        <NumberOfSpawns>60</NumberOfSpawns>
        <SpawnOffset>PT0.2S</SpawnOffset>
      </Enemy>
      <Enemy>
        <EnemyType>data/enemies/secondenemy</EnemyType>
        <SpawnTime>PT0S</SpawnTime>
        <NumberOfSpawns>10</NumberOfSpawns>
        <SpawnOffset>PT0.5S</SpawnOffset>
      </Enemy>
      <Enemy>
        <EnemyType>data/enemies/secondenemy</EnemyType>
        <SpawnTime>PT20S</SpawnTime>
        <NumberOfSpawns>10</NumberOfSpawns>
        <SpawnOffset>PT0.5S</SpawnOffset>
      </Enemy>
      <Enemy>
        <EnemyType>data/enemies/boss1</EnemyType>
        <SpawnTime>PT30S</SpawnTime>
        <NumberOfSpawns>1</NumberOfSpawns>
        <SpawnOffset>PT0S</SpawnOffset>
      </Enemy>
    </Enemies>
  </Asset>
</XnaContent>

แต่ละองค์ประกอบของศัตรูนั้นเป็นคลื่นของศัตรูเฉพาะประเภท ประเภทถูกกำหนดใน EnemyType ในขณะที่ SpawnTime เป็น "ระดับเวลา" คลื่นนี้ควรปรากฏขึ้น NumberOfSpawns และ SpawnOffset คือจำนวนศัตรูที่จะปรากฏขึ้นและเวลาที่ใช้ระหว่างการวางไข่แต่ละครั้งตามลำดับ

นี่อาจเป็นความคิดที่ดีหรืออาจมีสิ่งที่ดีกว่าออกไป ฉันไม่แน่ใจ. ฉันต้องการที่จะเห็นความคิดเห็นและความคิดบางอย่าง

ฉันมีสองปัญหาในเรื่องนี้: วางไข่ศัตรูอย่างถูกต้องและสร้างเครื่องมือแก้ไขระดับ สิ่งที่แก้ไขระดับเป็นปัญหาที่แตกต่างกันอย่างสิ้นเชิง (ซึ่งฉันอาจจะโพสต์ในอนาคต: P)

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

ดังนั้นความคิดใด ๆ ความคิดเห็น?

ขอบคุณล่วงหน้า.

คำตอบ:


4

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

โซลูชันนี้จะช่วยให้ตัวเองทำงานร่วมกับตัวแก้ไขระดับกราฟิกมากกว่าโซลูชันตามเวลา มันจะทำให้ง่ายขึ้นมากในการจับคู่จุดเฉพาะตามพื้นหลังการเลื่อนของคุณด้วยเมื่อศัตรูวางไข่


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

2

ฉันแนะนำให้คุณศึกษารหัสของ PowerManga เพื่อเป็นข้อมูลอ้างอิง พวกเขามีสองระดับ: เลื่อนระดับ (เหมือน tyrian) ระดับที่สิ่งต่าง ๆ ถูกวางตำแหน่งที่ระยะห่างจากระดับเริ่มต้นและสิ่งอื่น ๆ จะถูกสร้างแบบสุ่มและ "ยังคง" ระดับ (à la galaga) ที่คลื่นแยกวิเคราะห์เท่านั้น หลังจากที่ก่อนหน้านี้เสร็จสิ้นรูปแบบของมัน

แน่นอนว่าสามารถวางแผนรูปแบบคลื่นได้อย่างมีประสิทธิภาพโดยเส้นโค้งเบซิเยร์ต่อเนื่อง (หน้าวิกิพีเดียมีภาพเคลื่อนไหวที่ประณีตเพื่ออธิบายสิ่งนั้น)

หากฉันสามารถแสดงความคิดเห็นในขั้นสุดท้ายได้ฉันจะวาง XML ที่นี่เพื่อแสดงความเห็นเพิ่มเติมง่ายต่อการดูแลรักษาและมีประโยชน์มากขึ้นในการเขียนโปรแกรมเกมเช่นสคริปต์ LUA

HTH


ฉันใช้เส้นโค้ง bezier เพื่อเก็บการเคลื่อนไหวของศัตรู (ซึ่งต่อเนื่องเป็น xml) ฉันส่วนใหญ่ใช้ XML เพราะทั้ง. NET และ XNA มีการสนับสนุนในตัวสำหรับการทำให้เป็นอนุกรม / ดีซีเรียลไลเซชัน สคริปต์ LUA ฟังดูดี แต่จะต้องใช้งานมากกว่านี้ อย่างไรก็ตามฉันมักจะวางแผนที่จะใช้มันดังนั้นหลังจากฉันเสร็จสิ้นเครื่องมือพื้นฐานบางอย่างฉันจะตรวจสอบมันอย่างแน่นอน ในที่สุดความคิดของการวางไข่คลื่นหลังจากที่ก่อนหน้านี้ฟังดูน่าสนใจ
pek

2
XML นั้นใช้ได้ตราบใดที่มันถูกสร้างขึ้นโดยเครื่องมือไม่ใช่การแก้ไขด้วยมือ ในขณะที่ภาษาสคริปต์อาจมีประโยชน์สำหรับกรณีพิเศษ (เช่นผู้บังคับบัญชา) นั่นเป็นปัญหาที่แยกจากกันอย่างสิ้นเชิงในการกำหนดรูปแบบการโจมตีมาตรฐานใช่หรือไม่
bluescrn

0

พิจารณาสร้างศัตรูขั้นตอน ฉันรู้ว่ามันค่อนข้างแตกต่างจากคำตอบที่คุณต้องการและมันแก้ปัญหาโดยอ้อม

ถ้าฉันทำสิ่งนี้ฉันจะกำหนดค่า "แต้ม" ให้ศัตรูแต่ละหน่วยว่ามันยากแค่ไหนจากนั้นกำหนดระดับจำนวนคะแนน - 100 คะแนนคุ้มค่ากับศัตรู 1 แสนคะแนนหรือศัตรู 100 คะแนน หรืออะไรก็ตามที่อยู่ระหว่าง

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

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

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