ฉันสงสัยว่ากลไกการจัดการเวลาในเกมได้รับการออกแบบโดยทั่วไปอย่างไร ฉันมีความสนใจเป็นพิเศษในการย้อนเวลา (เรียงลำดับเหมือนใน SSX ล่าสุดหรือ Prince of Persia)
เกมดังกล่าวเป็นเกมยิงจากบนลงล่าง 2D
กลไกที่ฉันพยายามออกแบบ / นำไปใช้มีข้อกำหนดดังต่อไปนี้:
1) การกระทำของเอนทิตีนอกเหนือจากตัวละครของผู้เล่นนั้นกำหนดขึ้นอย่างสมบูรณ์
- การกระทำที่เอนทิตีทำจะขึ้นอยู่กับเฟรมที่ดำเนินไปตั้งแต่ระดับเริ่มต้นและ / หรือตำแหน่งของผู้เล่นบนหน้าจอ
- หน่วยงานจะเกิดในเวลาที่กำหนดในระหว่างระดับ
2) Time reverse ใช้งานได้โดยย้อนกลับแบบเรียลไทม์
- การกระทำของผู้เล่นจะถูกย้อนกลับมันจะย้อนกลับในสิ่งที่ผู้เล่นทำ ผู้เล่นไม่มีการควบคุมในช่วงเวลาถอยหลัง
- ไม่มีการ จำกัด เวลาที่ใช้ในการย้อนกลับเราสามารถย้อนกลับไปจนถึงจุดเริ่มต้นของระดับได้ถ้าต้องการ
ตัวอย่างเช่น:
เฟรม 0-50: ผู้เล่นเคลื่อนที่ foward 20 หน่วยในเวลานี้ศัตรู 1 วางไข่ที่เฟรม 20 ศัตรู 1 ย้ายซ้าย 10 หน่วยระหว่างเฟรม 30-40 ผู้เล่นยิงกระสุนที่เฟรม 45 กระสุนเดินทาง 5 foward (45-50) และสังหารศัตรู 1 ที่ กรอบ 50
การย้อนกลับนี้จะเล่นแบบเรียลไทม์: ผู้เล่นย้ายไปข้างหลัง 20 ยูนิตในช่วงเวลานี้ศัตรู 1 ฟื้นขึ้นมาที่เฟรม 50 กระสุนปรากฏขึ้นอีกครั้งที่เฟรม 50 กระสุนเคลื่อนไปข้างหลัง 5 และหายไป (50-45) ศัตรูเคลื่อนย้ายออกไป 10 (40-30) กรอบ 20
เพียงแค่ดูการเคลื่อนไหวที่ฉันมีความคิดบางอย่างเกี่ยวกับวิธีการบรรลุเป้าหมายนี้ฉันคิดว่ามีอินเทอร์เฟซที่เปลี่ยนพฤติกรรมเมื่อเวลากำลังจะมาถึงหรือย้อนกลับ แทนที่จะทำสิ่งนี้:
void update()
{
movement += new Vector(0,5);
}
ฉันจะทำสิ่งนี้:
public interface movement()
{
public void move(Vector v, Entity e);
}
public class advance() implements movement
{
public void move(Vector v, Entity e)
{
e.location += v;
}
}
public class reverse() implements movement
{
public void move(Vector v, Entity e)
{
e.location -= v;
}
}
public void update()
{
moveLogic.move(new vector(5,0));
}
อย่างไรก็ตามฉันตระหนักว่าสิ่งนี้จะไม่ได้ประสิทธิภาพที่ดีที่สุดอย่างชาญฉลาดและจะกลายเป็นความซับซ้อนอย่างรวดเร็วสำหรับการกระทำที่ก้าวหน้ากว่า (เช่นการเคลื่อนไหวที่ราบรื่นไปตามเส้นทางโค้ง ฯลฯ )