2d 플랫 포머의 "시간 제어"


9

플레이어가 버튼을 누르고 레벨을 다시 시작할 수있는 2d 플랫 포머를 만들고 있습니다. 이전 캐릭터만이 시간을 거슬러 여행하는 것처럼 레벨을 동시에 실행합니다.

나는 다른 게임이 전에 이것을 해왔음을 알고 있으며, 내가 생각한 방식은 게임 캐릭터가 일련의 동작 (유휴, 점프, 왼쪽 걷기 등)을 갖도록하고 그 동작의 변화를 감지하여 로그인하는 것입니다. 게임 시간과 함께 목록. 캐릭터가 레벨을 다시 실행해야 할 때 적절한 시점에 액션을 변경하는 목록을 살펴볼 수 있습니다.

이것이 최선의 방법입니까? 누구든지 이것에 경험이 있습니까?

감사.


당신이 찾고있는 것은 시간 제어보다 '재생'에 가깝습니다. 이 문제를 해결하는 방법에 대한 멋진 기사를 찾을 수 있지만 여전히 아래 답변 이이 분야에서 좋은 출발이라고 말합니다. 게임에서 '무작위'인 것은 진행 상황에 영향을 줄 수있는 경우 '유령'캐릭터가 다시 실행되도록 다시 재생해야합니다.
James

3
"무작위"부품에 대한 좋은 지적. 시드를 기반으로 숫자를 생성하는 임의 생성기를 사용해야합니다. 그런 다음 재생과 함께 시드를 저장하고 해당 재생을 재생할 때 동일한 시드를 사용하십시오.
bummzack

어떻게 했어요? 해결 방법은 무엇입니까?

답변:


8

편집하다:

이 질문에 대한 @Bluescrn의 답변을 참조하십시오. 그는 움직임 벡터 나 위치가 아닌 재생 제어의 약점에 대해 자세히 설명합니다.

-

당신은 올바른 길을 가고 있습니다. 내가 사용할 접근법은 다음과 같습니다.

컨트롤러

키보드 입력을 받아서 캐릭터에게 전달하는 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. 재생 : 키보드 입력을 무시합니다. 레벨이 시작된 후 경과 된 밀리 초에 따라 목록을 진행합니다. 현재 순간에 기록 된 키보드 상태에 따라 문자 입력을 전달합니다.

캐릭터

Character 객체가 생성되면 자체적으로 새로운 컨트롤러를 만듭니다. 캐릭터는 언제든지 두 가지 모드 중 하나 일 수 있습니다.

  1. 활성화 : 활성화 된 캐릭터는 하나 뿐이며 사용자가 제어하는 ​​캐릭터입니다. 캐릭터가 활성 모드에 있으면 해당 컨트롤러가 녹음 모드에 있습니다. 기본적 으로 캐릭터가 구성되면 활성 모드입니다.
  2. 고스트 : 이것은 당신의 과거 행동을 재현하는 것입니다. 캐릭터가 고스트 모드에 들어가면 캐릭터의 모양이 바뀌고 컨트롤러가 재생 모드로 설정됩니다.

레벨

새로 시작한 레벨

레벨을 시작할 때 단일 캐릭터를 만듭니다. 이제 레벨이 시작되고 플레이어는 자신의 일을합니다.

시간이 재설정 될 때

레벨이 재설정되면 다음 세 가지를 수행하십시오.

  1. 현재 활성 캐릭터에게 고스트 모드로 들어가도록합니다.
  2. 새로운 캐릭터를 만듭니다.
  3. 모든 문자를 불러 자신을 초기화하십시오. 이렇게하면 움직이지 않고 시작 위치에 다시 배치됩니다. 키를 누르지 않아도 컨트롤러에 밀리 초 0으로 재설정하도록 지시합니다.

그런 다음 레벨이 시작되고 플레이어는 자신의 일을합니다.


이것은 분명하다. 고마워 나는 옳은 생각을 가지고 있었지만, 움직임을 기록하는 중앙 시스템을 만들려고했지만 각 캐릭터가 자신의 움직임을 기록하는 것이 훨씬 쉬운 방법입니다. 감사.
Woody Zantzinger

8

기록 된 입력을 재생하는 경우, 동작이 재생 될 때 상태가 이동하거나 변경되었을 수있는 이동 / 파괴 / 대화 형 오브젝트의 영향을 고려하십시오.

또한 게임에서 가변 타임 스텝을 사용하는 경우 입력 재생이 정확하게 작동하지 않습니다. 고정 프레임 타임 게임 업데이트 (가변 프레임 속도 렌더링을위한 보간)를 고려하고 싶습니까?


1
내가 할 수 있다면 +10 중대한 고려 사항. 원하는 효과에 따라 움직임 벡터 또는 위치를 재생하는 것이 입력을 재생하는 것보다 우수합니다. 프레임 사이의 수십 밀리 초의 부정확성은 입력보다 움직임과 위치를 다룰 때 더 쉽게 설명 할 수 있습니다.
doppelgreener


0

키보드 입력을 녹음하는 것은 귀하의 경우에 유용하지 않을 수 있습니다. 그러나 타임 라인으로 스플라인을 생성 할 수 있습니다. 적용해야 할 힘으로 까다로운 경우 시간을 되감기도 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.