2011-01-07 3 views
1

TextureLoader.FromFile(device, "image.png");TextureLoader.FromFile(device, "image.png");TextureLoader.FromFile(device, "image.png");TextureLoader.FromFile(device, "image.png");TextureLoader.FromFile(device, "image.png");TextureLoader.FromFile(device, "image.png"); Sprite.Draw() 내 텍스처를 너무 작게 그립니다.

내 Draw 메서드에서 장치 장면을 시작한 다음 스프라이트 장면을 작성한 다음 를 썼습니다. sprite.Draw2D(texture, PointF.Empty, 0, PointF.Empty, Color.White);

그림 자체가 작동하지만 화면의 크기가 90 %와 같은 큰 부분 만 그립니다.

주어진 텍스처 크기로 소스 사각형을 시도했지만 동일한 버그가 발생했습니다.

제안이 있습니까?

답변

1

저는 C++ DirectX에서는 경험이 있지만 C# DirectX에서는 경험이 없으므로 이것을 소금으로 섭취하십시오. 스프라이트 인터페이스 내 경험에서

, 당신은, 확장, 회전 및 3D 객체와 필요처럼 번역 할 필요가있다. 규모를 잊어 버릴 수도 있습니다. 다음은 내 업데이트 기능 코드입니다.

void Button::Update() 
{ 
    Sprite->Begin(D3DXSPRITE_ALPHABLEND); 
    D3DXMATRIX trans; 
    D3DXMATRIX scale; 
    D3DXMATRIX world; 
    D3DXMatrixIdentity(&world); 
    D3DXMatrixTranslation(&trans, pos.x, pos.y, 0.0f); 
    D3DXMatrixScaling(&scale, scaleFactor, scaleFactor, 1.0f); 
    world = scale * trans; 
    Sprite->SetTransform(&world); 
    Sprite->Draw(buttonTexture, NULL, NULL, &D3DXVECTOR3(-width2, -height2, 0.0), whitecol); 
    Sprite->End(); 
} 

인정 하듯이,이 일을 매우 객체 지향 방법은 아니지만, 내 요구에 맞는.

+0

감사합니다. 이것은 올바른 방향으로 나를 지적했습니다. SlimDX를 사용하는 다른 사람들은'Sprite.Transform = Matrix.Scaling (0.1, 0.1, 0.1)' – Basic

1

경고 : 저는 DirectX 전문가가 아니지만 같은 문제가있었습니다.

스프라이트를로드하면 각 크기가 2의 거듭 제곱 인 크기에 맞게 스프라이트가 확장됩니다. 예를 들어 스프라이트가 200 x 65 인 경우 스프라이트의 너비는 256입니다. 너비가 256으로 확장되고 약간 증가) 128 (거의 두 배가됩니다).

이미지를 그릴 때 예상 한 높이의 거의 두 배가됩니다.

내 솔루션은 2 배의 높이와 폭을 가지고 내 이미지 파일을 수정 한 후에만 원래 크기했던 부분을 그립니다.

+0

OMFG 감사합니다. 저는 작업중인 게임에서 비슷한 문제를 겪고 있었고 384x48 인 버튼이 겉으로보기에는 크기가 조정 된 후 384x48 사각형이 아래쪽과 오른쪽 가장자리를 잘라내는 이유를 알 수 없었습니다. 나는 384와 48이 2의 힘이 아니라는 것을 완전히 잊었다. – derpface

관련 문제