수정이 포함 된 하향식 RPG 이동?


27

Zelda : A Link to the Past를 모두 플레이했으면 좋겠습니다. 틀렸다면 바로 정정 해주세요. 그러나 2D 하향식 캐릭터 움직임을 수정 터치로 흉내 내고 싶습니다. 다른 게임에서 이루어졌지만이 참조가 가장 관련이 있다고 생각합니다. 더 구체적으로 말하면, 내가 말하고있는 움직임과 수정은 다음과 같습니다.

  • 플로팅 이동은 포켓몬 및 이동 패드를 한 번 탭하여 해당 기본 방향으로 한 칸 이동하는 다른 게임과 같은 타일 기반 이동으로 제한되지 않습니다. 이 부유 운동은 대각선 운동을 달성 할 수 있어야합니다.
  • 서쪽을 걷고 있고 북동 / 남서쪽으로 대각선으로 벽에 오면 컨트롤러에서 왼쪽 (서쪽)을 계속 누르고 있어도 남서쪽 움직임으로 수정됩니다. 이것은 두 대각선이 양방향으로 수정하는 데 효과적입니다.
  • 문이나 복도로 정사각형으로 걸어서 몇 픽셀을 떨어 뜨린 경우 복도를 통과하거나 복도를 따라 내려가는 것으로 수정됩니다. 즉, 모서리에 부딪 치면 복도 / 문으로 밀려납니다.

나는 이것을 달성 할 수있는 효율적인 방법을 찾았으며 운이 없었습니다. 분명히 NPC의 움직임이 아니라 인간 캐릭터의 움직임에 대해 이야기하고 있습니다. 이런 종류의 운동에 자원이 있습니까? 위키 나 다른 것에 대해 설명 된 방정식이나 알고리즘?

XNA Framework를 사용하고 있는데, 이것에 도움이 될만한 것이 있습니까?

답변:


23

글쎄, 첫 번째 글 머리는 쉽습니다. 타일 ​​기반 좌표 대신 월드 또는 픽셀 좌표로 캐릭터의 위치를 ​​저장하고 조작하기 만하면됩니다. 이와 관련하여 문제가 발생한 경우 세계 및 타일 공간에 대한 표현 선택이 혼란 스러울 수 있으므로 자세한 내용을 게시하거나 별도의 구체적인 질문을해야합니다.

두 번째 요점은 플레이어의 (정규화 된) 움직임 벡터를 벽의 법선 벡터에 추가 한 다음 다시 정규화하는 것입니다. 결과 벡터의 구성 요소의 부호는 벽이 플레이어의 움직임과 어떤 관련이 있는지를 나타내며 벡터 자체는 플레이어가 현재 움직일 수있는 방향을 나타냅니다.

세 번째 포인트의 경우 벽과 플레이어 모두에 대해 충돌 사각형이 있다고 가정하면 플레이어의 충돌 사각형이 벽의 충돌 사각형과 얼마나 많이 접촉하는지 확인할 수 있습니다. 예를 들어 플레이어가 오른쪽으로 움직이고 수직 벽에 부딪히면 충돌 사각형의 Y 축 범위를 비교합니다. 플레이어의 범위가 벽의 범위를 임계 값보다 약간 초과하면 플레이어의 Y의 75 % 축 범위를 설정하면 플레이어가 문을 향해 "속임수"를합니다.

여기서는 객체 모델이 코드에서 어떻게 보이는지, 어떤 기법을 선택했는지에 대해 상당히 많은 가정을했습니다. 주로 질문의 일반성 때문입니다. 나는 같은 이유로 간단하지만 (아마도 최적은 아니지만) 접근 방식을 제안하려고했습니다. 이 질문이나 새로운 정보에 더 구체적인 정보를 제공 할 수 있다면 더 자세한 정보 나 더 나은 아이디어를 제공 할 수 있습니다.


예, 캐릭터를 떠 다니는 것은 문제가되지 않았습니다. 사람들이 요구 사항임을 확인하게하세요. 당신은 나에게 핵심 답을 주었다 : 벡터가있는 타일! 나는 그것을 생각하지 않았다 믿을 수 없습니다. 고맙습니다.
Corey Ogburn

zelda 에는 각도가 하나만 있었으므로 법선 벡터를 계산할 필요가 없었으며 코드의 특별한 경우였습니다.
BlueRaja-대니 Pflughoeft

타일에 벡터를 제공하는 방법을 이해하지 못합니다. 어떤 모습일까요?
테스트

타일은 이미 통과 가능한지 여부에 관계없이 그래픽과 같은 데이터를 가지고있을 것입니다. 이것은 다른 필드 일뿐입니다. 예를 들면 : struct Tile {vector2 normal; ...} 법선 값은 타일을 정의하는 데이터와 함께 제공되어야합니다.
Josh

@JoshPetrie 이것을 수정. 여러 방향으로 충돌 할 수있는 타일에 여러 개의 벡터가 필요하지 않습니까? 타일에 단일 벡터가 어떻게있을 수 있는지 잘 모르겠습니다.
테스트

4

두 번째 요점에 대한 가능한 대답은 내적을 사용하여 벽 벡터를 따라 플레이어의 움직임 벡터를 투영하는 것입니다 (ab * normalized (b)). 그런 다음 벽 방향으로 플레이어를 얼마나 멀리 이동시키는지를 알려주는 벡터를 얻습니다. 벡터를 기준으로 플레이어를 움직이면 벽을 따라 '슬라이드'가 나타납니다. 이전 게임 프로젝트에서 나를 위해 일했습니다.


3

Josh에게는 훌륭한 대답이지만 몇 가지 제안을 추가하겠습니다.-벽을 미끄러지는 것에 대한 자세한 내용을 보려면 내 질문을 확인하십시오. 이 답변에서 실제로 잘 작동하도록했습니다. -내가 실수하지 않으면 화면을 올릴 때 링크가 가장 가까운 전체 수평 그리드 사각형에 쉽게 정렬됩니다. 이런 식으로 문에 도착하면 제대로 줄을 지어있을 가능성이 높습니다 (잘못되었을 수 있습니다). -문을 쉽게 통과하려면 캐릭터의 충돌 상자가 문 너비보다 훨씬 작아야합니다.


아니면 충돌 상자가 원일까요?
Oskar Duveborn

2

출입문을 수정하기 위해 출입문의 충돌 물체를 출입문 이미지보다 약간 크게 만들 수 있습니다. 이로 인해 Josh가 제안한 것과 동일한 효과가 발생하지만 벽의 충돌 사각형에 대한 근접성을 계산할 필요는 없습니다.

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