“ การควบคุมเวลา” ในแพลตฟอร์ม 2d


9

ฉันกำลังสร้าง platformer 2d ที่ผู้เล่นสามารถกดปุ่มและเริ่มระดับใหม่เฉพาะอักขระก่อนหน้าของพวกเขาเท่านั้นที่จะทำงานในระดับเดียวกันได้เช่นเดียวกับที่พวกเขากำลังย้อนเวลากลับไป

ฉันรู้ว่าเกมอื่น ๆ เคยทำมาก่อนและวิธีที่ฉันคิดว่าจะทำคือการทำให้ตัวละครในเกมมีชุดของการกระทำ (Idle, Jumping, Walking Left เป็นต้น) จากนั้นตรวจจับการเปลี่ยนแปลงในการกระทำเหล่านั้น รายการพร้อมกับเวลาเล่นเกม ดังนั้นเมื่อฉันต้องการให้ตัวละครวิ่งเลเวลอีกครั้งด้วยตัวของมันเองฉันสามารถผ่านรายการที่เปลี่ยนแปลงการกระทำของมันในเวลาที่เหมาะสม

นี่เป็นวิธีที่ดีที่สุดที่จะทำ? ไม่มีใครมีประสบการณ์ในการนี้หรือไม่?

ขอบคุณ


สิ่งที่คุณกำลังมองหาคือ 'เล่นซ้ำ' มากกว่าการควบคุมเวลา คุณอาจพบบทความดีๆเกี่ยวกับวิธีจัดการกับสิ่งนี้ แต่ฉันก็ยังบอกว่าคำตอบด้านล่างนี้เป็นจุดเริ่มต้นที่ดีในเรื่องนี้ โปรดทราบว่าสิ่งต่าง ๆ ที่ 'สุ่ม' ในเกมจะทำให้เกิดการรีเพลย์สำหรับตัวละคร 'ผี' หากมันมีผลต่อความคืบหน้า
James

3
จุดดีเกี่ยวกับชิ้นส่วน "สุ่ม" ตรวจสอบให้แน่ใจว่าใช้ตัวสร้างแบบสุ่มที่สร้างตัวเลขขึ้นอยู่กับเมล็ด จากนั้นบันทึกเมล็ดด้วยการเล่นซ้ำของคุณและใช้เมล็ดเดียวกันเมื่อเล่นการเล่นซ้ำนั้น
bummzack

คุณทำสิ่งนี้ได้อย่างไร วิธีแก้ปัญหาของคุณคืออะไร

คำตอบ:


8

แก้ไข:

โปรดดูคำตอบของ @ Bluescrn สำหรับคำถามนี้ เขาอธิบายถึงจุดอ่อนในการเล่นซ้ำการควบคุมมากกว่าการเคลื่อนไหวของเวกเตอร์หรือตำแหน่ง

-

คุณมาถูกทางแล้ว นี่คือวิธีที่ฉันใช้:

ตัวควบคุม

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

actions[0].milliseconds = 400     actions[0].action = right pressed
actions[1].milliseconds = 1000    actions[1].action = jump pressed
actions[2].milliseconds = 1300    actions[2].action = jump released
actions[3].milliseconds = 2500    actions[3].action = jump pressed
actions[4].milliseconds = 3000    actions[4].action = jump released
actions[5].milliseconds = 5330    actions[5].action = right released

คอนโทรลเลอร์มีสองโหมด:

  1. บันทึก: รับคีย์บอร์ด บันทึกอินพุตในรายการ ส่งอินพุตอักขระตามสถานะคีย์บอร์ด
  2. เล่นซ้ำ: ละเว้นคีย์บอร์ดอินพุต เลื่อนระดับผ่านรายการตามมิลลิวินาทีนับตั้งแต่ระดับเริ่มขึ้น มอบการป้อนอักขระตามสถานะแป้นพิมพ์ที่บันทึกในช่วงเวลาปัจจุบัน

ตัวละคร

เมื่อวัตถุตัวละครของคุณถูกสร้างมันจะสร้างตัวควบคุมใหม่สำหรับตัวเอง ตัวละครสามารถอยู่ในหนึ่งในสองโหมดในเวลาใดก็ได้:

  1. ใช้งานอยู่: มีตัวละครที่ใช้งานเพียงตัวเดียวเท่านั้นและเป็นตัวละครที่คุณควบคุม เมื่อตัวละครอยู่ในโหมดแอคทีฟคอนโทรลเลอร์จะอยู่ในโหมดบันทึก โดยค่าเริ่มต้นเมื่อสร้างตัวละครมันอยู่ในโหมดใช้งาน
  2. Ghost: นี่คือสิ่งที่ทำซ้ำการกระทำในอดีตของคุณ เมื่อตัวละครเข้าสู่โหมดผีมันจะเปลี่ยนลักษณะที่ปรากฏและตั้งค่าตัวควบคุมเป็นโหมดเล่นซ้ำ

ระดับ

ระดับเริ่มต้นใหม่

เมื่อคุณเริ่มระดับให้สร้างตัวละครตัวเดียว ตอนนี้ระดับเริ่มต้นและผู้เล่นทำสิ่งของเขา

เมื่อเวลารีเซ็ต

เมื่อระดับรีเซ็ตให้ทำสามสิ่ง:

  1. บอกลักษณะการใช้งานปัจจุบันเพื่อเข้าสู่โหมดโกสต์
  2. สร้างตัวละครใหม่
  3. เรียกตัวละครทั้งหมดเพื่อรีเซ็ตตัวเอง สิ่งนี้จะทำให้พวกเขากลับไปที่ตำแหน่งเริ่มต้นโดยไม่มีการเคลื่อนไหว ฯลฯ พวกเขาจะบอกให้ผู้ควบคุมของตนรีเซ็ตเป็นมิลลิวินาทีที่ 0 โดยไม่ต้องกดปุ่ม

จากนั้นระดับเริ่มต้นและผู้เล่นทำสิ่งที่เขา


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

8

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

นอกจากนี้การเล่นซ้ำอินพุตจะไม่ทำงานอย่างแม่นยำหากเกมของคุณใช้การประทับเวลาแบบแปรผัน คุณอาจต้องการพิจารณาการอัปเดตเกมตามเวลาที่กำหนดตายตัว


1
+10 ถ้าทำได้ การพิจารณาที่ดี การเล่นซ้ำเวกเตอร์การเคลื่อนไหวหรือตำแหน่งจะดีกว่าการเล่นซ้ำอินพุตขึ้นอยู่กับเอฟเฟกต์ที่ต้องการ หลายสิบมิลลิวินาทีของความไม่ถูกต้องระหว่างเฟรมน่าจะง่ายกว่าเมื่อทำงานกับการเคลื่อนไหวและตำแหน่งมากกว่าที่มีอินพุท
doppelgreener


0

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

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