내 2D 엔진을 기반으로 이미지의 정확한 위치를 얻기 해상도 독립적이며 여기에 기사를 기반으로 카메라가 : http://www.david-gouveia.com/portfolio/2d-camera-with-parallax-scrolling-in-xna/2D 시차 카메라
내 카메라 클래스로 기사 위와 같은 방법으로 시차 스크롤을 구현했습니다 언급. 그것은 훌륭하게 작동하지만 내 도려내 기 코드를 망쳐 놓았고 수학을 계산하는 데 어려움을 겪고 있습니다.
내 배경 이미지 각각에는 현재 화면에 있는지 확인하는 데 사용되는 사각형이 있습니다. 카메라 사각형과 충돌하지 않으면 그릴 수 없습니다. 문제는 이미지가 시차 레이어로 드로잉하는 경우 사각형이 실제로 화면에 나타나는 위치를 계산하지 않는다는 것입니다.
(가) 내 카메라 클래스의 변환 행렬은 다음과 같다 :
각 시차 층public static Matrix GetTransformMatrix(Vector2 parallax)
{
return Matrix.CreateTranslation(new Vector3(-position * parallax, 0)) * Matrix.CreateRotationZ(rotation) *
Matrix.CreateScale(new Vector3(zoom, zoom, 1)) * Matrix.CreateTranslation(new Vector3(Resolution.VirtualWidth
* 0.5f, Resolution.VirtualHeight * 0.5f, 0));
}
, I는 SpriteBatch.Begin을 (통화) 및에 따라 전달 오프셋 올바른 시차와 행렬을 상기 변환 전달할 우리가 그리는 레이어 (전경, 배경 등)
나는 마우스를 클릭 한 위치를 얻는 데 적합한 ScreenToWorld 함수를 성공적으로 만들었습니다. 카메라가 작동하려면 해상도 매트릭스와 카메라 매트릭스를 모두 계산해야합니다.
public static Vector2 ScreenToWorld(Vector2 input, Vector2 parallax)
{
input.X -= Resolution.VirtualViewportX;
input.Y -= Resolution.VirtualViewportY;
Vector2 resPosition = Vector2.Transform(input, Matrix.Invert(Resolution.getTransformationMatrix()));
Vector2 finalPosition = Vector2.Transform(resPosition, Matrix.Invert(Camera.GetTransformMatrix(parallax)));
return finalPosition;
}
그래서 나는 내가 WorldToScreen 기능을 필요 내 시차 층의 정확한 사각형의 위치를 계산하는 생각 ... 내가 이것을 시도했지만 작동하지 않습니다 :
public static Vector2 WorldToScreen(Vector2 input, Vector2 parallax) //I pass the same parallax value that is used in the Camera matrix function.
{
input.X -= Resolution.VirtualViewportX;
input.Y -= Resolution.VirtualViewportY;
Vector2 resPosition = Vector2.Transform(input, Resolution.getTransformationMatrix());
Vector2 finalPosition = Vector2.Transform(resPosition, Camera.GetTransformMatrix(parallax));
return finalPosition;
}
난 맞춰 보겠다. 내 수학이 틀렸어? 위의 함수를 parallaxed Rectangle 위치에 전달하고 시차 이미지가 실제로 그려지는 곳으로 업데이트하려고합니다. 누군가가 도울 수 있다면 미리 감사드립니다!