Я создаю игру, используя Go с библиотекой рендеринга "pixel".
Я пытаюсь заставить работать полноэкранный режим / изменение размера, но у меня есть проблема, и вот как бороться с растяжением изображений
Я видел и использовал решение эффекта "почтового ящика" для игры.
То есть, рисуя игру в том же соотношении сторон, такрастяжение не было бы проблемой, оставляя дополнительное пространство в виде черных полос.
Моя проблема заключается в том, что при попытке сделать это в этой библиотеке рендеринга я могу только масштабировать матрицу«Холст», на котором я рисую.
Я привык к SFML с C ++, где я могу просто определить фиксированный размер для «Представления» [того, что рисуется], а не масштабировать его.
Вот так я получаю текущее масштабирование для матрицы, это неправильно, но это то, что у меня есть.
camZoom 2.0, он там, поэтому экран больше.Если camZoom равен 1,0 [нормальный], изображения слишком малы.
func letterBox(win *pixelgl.Window) {
windowRatio := winWidth / winHeight
viewRatio := win.Bounds().W() / win.Bounds().H()
sizeX := 1.
sizeY := 1.
horizontalSpacing := true
if windowRatio < viewRatio {
horizontalSpacing = false
}
if horizontalSpacing {
sizeX = viewRatio / windowRatio
} else {
sizeY = windowRatio / viewRatio
}
viewMatrix = pixel.IM.
Moved(pixel.V(win.Bounds().Center().X/camZoom, win.Bounds().Center().Y/camZoom)).
ScaledXY(pixel.V(win.Bounds().Center().X/camZoom, win.Bounds().Center().Y/camZoom), pixel.V(sizeY, sizeX))
}
Вот как это выглядит в настоящее время:
Обычный [без изменения размера,1024x768]:
Ширина окна увеличена [сжимается] [] 2
Высота окна увеличена [растягивается наX, скрывая большую часть «холста»] [] 3
Полноэкранный [просто сохраняет свой первоначальный размер, но ширина «холста» немного уменьшена] [] 4
Я просто не могу понять математику с ним.
Если это не лучший способ решить проблему с полноэкранным режимом, которая у меня есть, тогда дайте мне знать, и я могу задать еще один вопрос, но мне сказали, что это то, как вы должны это сделать.