타일 ​​기반 2D 플랫 포머에서 45 ° 경사 the player will be set to. //this

타일 ​​기반 플랫 포머에서 간단한 45 ° 경사를 원하지만 알고리즘을 다운시키는 것만으로는 불가능합니다. 코드와 비디오를 살펴보십시오. 아마도 분명하지 않습니까?

//collisionRectangle is the collision rectangle of the player with 
//origin at the top left and width and height
//wantedPosition is the new position the player will be set to.
//this is determined elsewhere by checking the bottom center point of the players rect
if(_leftSlope || _rightSlope)
{        
    //Test bottom center point
    var calculationPoint = new Vector2(collisionRectangle.Center.X, collisionRectangle.Bottom);
    //Get the collision rectangle of the tile, origin is top-left
    Rectangle cellRect =
        _tileMap.CellWorldRectangle(
            _tileMap.GetCellByPixel(calculationPoint));
    //Calculate the new Y coordinate depending on if its a left or right slope
    //CellSize = 8
    float newY = _leftSlope
                            ? (calculationPoint.X % CellSize) + cellRect.Y
                            : (-1 * (calculationPoint.X % CellSize) - CellSize) + cellRect.Y;
    //reset variables so we dont jump in here next frame
    _leftSlope = false;
    _rightSlope = false;
    //now change the players Y according to the difference of our calculation
    wantedPosition.Y += newY - calculationPoint.Y;
}

어떻게 생겼는지에 대한 비디오 :
http://youtu.be/EKOWgD2muoc



답변

내가 당신의 질문을 읽는 것을 이해하면서, 당신 은 플레이어 YX위치에 따라 올바른 위치 를 계산하고 싶습니다 . 이것은 다소 사소합니다. 이 이미지를 살펴보십시오.

경사

슬로프 타일이 주어진 위치에 있다고 가정합니다 x,y(원점은 이미지에서와 같이 왼쪽 하단). 플레이어 위치 x1와 경사 타일의 너비와 높이가 있습니다 ( u, v). x, y그리고 x1세계 좌표입니다.

이러한 매개 변수가 주어지면 플레이어의 Y 위치 ( y1)는 다음과 같습니다.

y1 = y + (x1 - x) * (v / u)

45도 각도 만 다루면 훨씬 간단 해집니다.

y1 = y + (x1 - x)

경사가 다른 방향이면 다음과 같습니다.

y1 = y + (v - (x1 - x))


답변

이것은 이미 답변되었지만 다른 방정식을 제공하겠습니다. y = mx + b여기서 y는 계산 된 좌표, m은 기울기 (45도에서 1은 45도에서 1은 45도, b는 y 절편입니다)- -x = 0 인 y 좌표

이렇게하면 약간 더 유연 해집니다. m을 변경하여 45도 이외의 다른 기울기를 계산할 수 있습니다. 예를 들어, m / 3의 pi / 3는 30 도의 기울기를 제공합니다.


답변

이 사이트에서 많은 가치를 찾을 수 있습니다 :
http://info.sonicretro.org/Sonic_Physics_Guide

특히 당신이 찾고있는 것을 위해 Solid Tiles : Slopes and Curves 섹션을 확인하십시오. 기본적으로 이것이 초기 소닉 게임에서 달성되었다고 생각되는 방식을 보여줍니다.


답변

Seperate Axis Theorm을 살펴볼 수도 있습니다. 기울기 문제를 해결하지만 약간의 수학이 필요하며 이론 자체는 머리를 돌리기까지 시간이 걸립니다. 더 잘 설명하는 튜토리얼과 책에 당신을 연결했습니다

메타넷 소프트웨어 튜토리얼

실시간 충돌 감지


답변

다른 곳에서 오류가 있거나 올바른 시간에 _leftSlope / _rightSlope 플래그를 설정하지 않은 것 같습니다. 이 코드는 X 움직임에 전혀 영향을 미치지 않지만 비디오의 문제인 것 같습니다.

해당 플래그가 전혀 트리거되는지 확인해야합니다. 그런 다음 수평 충돌 감지를 확인하십시오. 경사면에서 트리거하지 않기를 바랍니다.


답변