타일 ​​기반 아이소 메트릭 게임에서 자유로운 움직임


9

타일 ​​기반 아이소 메트릭 게임에서 자유로운 움직임을 구현하는 합리적인 방법이 있습니까? 즉, 플레이어가 한 타일에서 다른 타일로 즉시 점프하거나 그리드에 "스냅"되지 않을 것입니다 (예를 들어, 타일 간 이동이 애니메이션되었지만 애니메이션이 끝나기 전에 아무것도하지 않는 경우). 저는 게임 프로그래밍과 관련하여 초보자이지만,이 사이트와 다른 리소스를 사용하면 기본 작업을 수행하는 것이 매우 쉽지만이 특정 문제에 대한 유용한 리소스를 찾을 수 없었습니다. .

현재 나는 이것에 가까운 것을 즉흥적으로 만들었습니다 : http://jsfiddle.net/KwW5b/4/ (WASD movement). 움직임에 대한 아이디어는 마우스 맵을 사용하여 플레이어가 다른 타일로 이동 한 후 오프셋을 뒤집는 것을 감지하고 대부분 제대로 작동합니다 (각 코너에서 플레이어가 잘못된 위치로 이동 함) . //www.youtube.com/watch?v=0xr15IaOhrI ( 아마도 전체 마우스 맵이 제대로 작동하지 않았기 때문일 수 있습니다.)) 그러나 좋은 / 정확한 솔루션에 가깝다는 환상은 없습니다. 어쨌든, 그것은 주로 어떤 종류의 것을 구현하고 싶은지를 보여주는 것입니다.


그 코드는 멋지게 보입니다. 문제는 정확히 무엇입니까? 당신은 코드가 꽤 좋은 것처럼 보입니다 (좋은 방법으로). 데모에서 어떤 기능이 빠져 있습니까?
AturSams

코너 문제의 의미는 youtube.com/watch?v=0xr15IaOhrI 와 같은 행동이었습니다 . 문제가되는 오프셋에 대해 많은 if-check를 수행하는 것 이외의 다른 솔루션을 생각해 낼 수 없었으며, 심지어 플레이어가 잘못된 위치로 뒤틀리는 특별한 경우가 있습니다. 그러나 내가 말했듯이, 나는 다른 곳에서 사용 된 방법을 보지 못했기 때문에 이런 종류의 운동이 어떻게 구현되는지 궁금합니다.
xtr486

답변:


10

우선 다음에서 방향을 바꾸는 것이 좋습니다 : W-왼쪽 위 S-오른쪽 아래 A-왼쪽 아래 D-오른쪽 위

더 직관적으로 : W-위로 S-아래로 A-왼쪽 D-오른쪽

우려 사항에 관해서는 아이소 메트릭 타일 좌표를 그리드 좌표로 변환하는 기능과 다른 방법으로 두 가지 기능을 만드는 것이 좋습니다. 그렇게하면 MVC를 간단하게 분리 할 수 ​​있으며 활성 타일을 계산할 때 삶을 더 쉽게 만들 수 있습니다. 여기에 이미지 설명을 입력하십시오


1
당신의 대답은 정말로 유망 해 보이지만, 나는 그것의 많은 부분이 단지 내 머리 위로 넘어 간다는 것을 인정합니다. 그러나 앞으로 며칠 동안 계속해서 솔루션을 소화하려고 노력할 것입니다. 이것은 당신이 무엇을했는지에 가까운 곳입니까? jsfiddle.net/Sd4ZP/18 일부 논리 오류 (하나에 의해 벗어남 ) 등이 있지만 하향식 맵과 아이소 메트릭 맵의 움직임은 동일합니다. 내가 얻지 못한 것은 타일 오프셋을 하향식에서 등각
도로

지금까지 괜찮아 보입니다! 저녁에 살펴 보겠습니다. 문제는 아이소 메트릭 타일 드로잉 메소드의 변환을 positionToUser () 변환 함수에 적용하고 positionFromUser () 메소드에서 반전시키는 것입니다.
Markus von Broady

문제가 있습니다 : 캔버스 그리기 API를 사용하는 대신 이미지를 넣어 izometric보기를 그리는 중입니다. 결국 izo 타일은 단색보다 훨씬 논리적이기 때문에 상당히 논리적입니다. 그러나 디버깅을 위해서는 타일 사이에 선을 그려야하므로 인생이 훨씬 쉬워집니다. 어쨌든, 나는 당신의 코드를 포크하고 positionToUser (x, y) 번역 함수를 만들었습니다. 타일에 검은 색 사각형을 중심으로 배치하고 (이소 뷰에서는 항상 중앙에 위치하므로) 마우스를 하단 캔버스 위로 이동하면 번역 된 점이 izo 캔버스에 표시됩니다. jsfiddle.net/tZTXS/1
Markus von Broady

감사! 실제로 drawIsometric 함수의 등각 투영 오프셋을 직접 추론했습니다. 이제 다음과 같이 보입니다 : jsfiddle.net/P2eKF/4 , 원래 질문에서 내가 한 것과 똑같은 것처럼 보이 므로 답을 표시하겠습니다. :)
xtr486 23.14에

당신이 해줘서 다행입니다! WA, WD, AS, SD 키 조합이 어떻게 45도 각도 대신 등각 축으로 이동을 정렬하는지 좋아합니다. 잘 했어.
Markus von Broady

0

이해하면 플레이어가 타일을 타일로 이동하지만 점프하지 않기를 원합니다. 당신은 할 수 있습니다 :

1- 타일 t0으로 시작하고 오프셋 0

2- 플레이어가 타일 t1로 이동하면 오프셋 =-(t1-t0)으로 설정

3- 플레이어 업데이트에서 오프셋이 0이 아닌 경우 업데이트 시간과 플레이어 속도를 사용하여 감소시킵니다.

amount = deltatime * playerSpeed
deltaoff = sqrt(offsetX*offsetX + offsetY*offsetY)
total = min( amount, deltaoff )
offsetX = offsetX - (total * offsetX / deltaoff)
offsetY = offsetY - (total * offsetY / deltaoff)

4- Yo는 플레이어가 타일에 언제 있는지 알기 위해 offset == 0 check를 사용할 수 있습니다.

이것으로 당신은 맵에서 자유롭게 움직이지만 타일을 고수하는 플레이어를 얻습니다.

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