C++/Windows 8/Win API/DirectX 9.0Окно изменения размера и масштабирования изображения/повторного объявления назад размер буфера/C++/DirectX 9.0
Я имею реальный большие проблемы с этим:
https://github.com/jimmyt1988/TheGame/tree/master/TheGame
Проблема в том, что я определил некоторые корректирующие функции координат. Они предназначены для того, чтобы изменить размер окна, и мне нужно компенсировать все мои координаты, чтобы мои координаторы мыши выработали правильные коллизии, а также масштабировали и все же сохраняли коэффициент блокировки для изображений, которые я рисую на экране.
Например, если у меня был экран с разрешением 1920 x 1080, а затем был изменен до 1376 x 768, мне нужно убедиться, что ограничивающие рамки для моих объектов (когда моя мышка нависает над ними) настраивается на мышь координаты, которые я использую, чтобы проверить, находится ли мышь в ограничивающей рамке.
Я узнал, что изначально у меня были проблемы, потому что, когда я менял свое окно, directX автоматически масштабировал все, и кроме того, я тоже менял вещи, поэтому они были бы полностью ввернуты ... Мне сказали кто-то, что мне нужно, чтобы повторно объявить ширину и высоту экранного буфера, что я сделал, имея в виду, что у меня есть граница с моим окном, а также меню вверху.
Может ли кто-нибудь понять, почему ... независимо от того, что вы делаете все это, я все равно получаю неправильные результаты.
Если вам удастся запустить мое приложение: Нажатие кнопки 1 будет делать разрешение 1920 х 1080, нажав клавишу 2 сделает 1376 х 768. изменение размера совершенно неправильно: https://github.com/jimmyt1988/TheGame/blob/master/TheGame/D3DGraphics.cpp
float D3DGraphics::ResizeByPercentageChangeX(float point)
{
float lastScreenWidth = screen.GetOldWindowWidth();
float currentScreenWidth = screen.GetWindowWidth();
if(lastScreenWidth > currentScreenWidth + screen.GetWidthOffsetOfBorder())
{
float percentageMoved = currentScreenWidth/lastScreenWidth;
point = point * percentageMoved;
}
return point;
}
float D3DGraphics::ResizeByPercentageChangeY(float point)
{
float lastScreenHeight = screen.GetOldWindowHeight();
float currentScreenHeight = screen.GetWindowHeight();
if(lastScreenHeight > currentScreenHeight + screen.GetHeightOffsetOfBorderAndMenu())
{
float percentageMoved = currentScreenHeight/lastScreenHeight;
point = point * percentageMoved;
}
return point;
}
и но если вы поместите точку возврата над этим блоком кода и просто ничего не сделаете для него, он отлично масштабируется из-за цветения directX независимо от того, что вызывается правильно (presparams ранее объявлены в конструкции D3DGraphics и ссылка, содержащаяся в классе его самоопределение:
void D3DGraphics::ResizeSequence()
{
presParams.BackBufferWidth = screen.GetWindowWidth() - screen.GetWidthOffsetOfBorder();
presParams.BackBufferHeight = screen.GetWindowHeight() - screen.GetHeightOffsetOfBorderAndMenu();
d3dDevice->Reset(&presParams);
}
Это проблема под рукой:
Вот код, который делает эту мерзость прямоугольника:
void Game::ComposeFrame()
{
gfx.DrawRectangle(50, 50, screen.GetWindowWidth() - screen.GetWidthOffsetOfBorder() - 100, screen.GetWindowHeight() - screen.GetHeightOffsetOfBorderAndMenu() - 100, 255, 0, 0);
}
EDIT ::::::::::: :::::
я заметил, что на MSDN написано:
Перед вызовом метода IDirect3DDevice9 :: Reset для устройства приложение должно освободить любые явные цели рендеринга, глубинные трассировки , дополнительные цепи подкачки, государственные блоки и D3DPOOL_DEFAULT ресурсы, связанные с устройством.
Я теперь выпустил vbuffer и восстановил его после того, как препараты и устройство сбрасываются.
EDIT ::::::::::::
Я разместил HRESULT на моем сбросе, в котором я теперь управлять, чтобы вызвать ошибку ... Но, хорошо .. это Безразлично» я действительно помогу! : http://i.stack.imgur.com/lqQ5K.jpg
Есть ли что-нибудь, что я могу сделать для этого вопроса, чтобы помочь получить ответ? Не стесняйтесь загружать весь проект, если вас это беспокоит, чтобы проверить его. Я пробовал эту проблему уже более 3 недель (по вечерам), я довольно застрял :( – Jimmyt1988