게임에서 시간 조작 메커니즘이 일반적으로 어떻게 설계되는지 궁금합니다. 특히 시간 반전에 관심이 있습니다 (최신 SSX 또는 페르시아 왕자와 같은 종류).
이 게임은 2D 하향식 슈팅 게임입니다.
내가 디자인 / 구현하려는 메커니즘에는 다음 요구 사항이 있습니다.
1) 플레이어 캐릭터 이외의 개체의 행동은 완전히 결정적입니다.
- 실체가 취하는 행동은 레벨 시작 이후 진행된 프레임 및 / 또는 화면에서 플레이어의 위치를 기준으로합니다.
- 레벨 동안 설정된 시간에 엔티티가 생성됩니다.
2) 시간 역전은 실시간으로 되돌아 가서 작동합니다.
- 플레이어 동작도 반대로되어 플레이어가 수행 한 작업을 반대로 재생합니다. 리버스 타임 동안 플레이어는 제어 할 수 없습니다.
- 반전에 소요되는 시간에는 제한이 없으며 원하는 경우 레벨의 처음으로 되돌릴 수 있습니다.
예로서:
프레임 0-50 :이 시간 동안 플레이어가 20 유닛을 앞으로 이동합니다. 프레임 20에서 적 1이 스폰됩니다. 프레임 40-40 동안 적 1이 10 유닛을 왼쪽으로 이동합니다. 플레이어가 프레임 45에서 총알을 쏜다. 프레임 50
이것을 뒤집 으면 실시간으로 재생됩니다 :이 시간 동안 플레이어가 20 단위 뒤로 뒤로 이동합니다. 적 1이 프레임 50에서 되살아납니다. 총알이 프레임 50에 다시 나타납니다. 총알이 뒤로 이동하고 5가 사라집니다 (50-45). 프레임 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));
}
그러나 나는 이것이 현명한 성능이 아니라는 것을 깨달았고 더 진보 된 작업 (곡선 경로를 따라 부드럽게 움직이는 등)을 위해 신속하게 복잡해질 것입니다.