Пигамей масштабирование игры-разрешение + координаты - PullRequest
0 голосов
/ 02 мая 2018

Я много об этом искал, но, похоже, ни один пост не ответил на этот конкретный вопрос. Так что я делаю приложение Pygame, и я очень новичок в этом. Для масштабирования экрана я использую следующие строки кода для получения информации об экране пользователя:

infoObject = pygame.display.Info()
ScreenWidth = infoObject.current_w
ScreenHeight = infoObject.current_h
window = pygame.display.set_mode((ScreenWidth, ScreenHeight), pygame.FULLSCREEN)

Но моя проблема здесь в следующем: я использую свою текущую статистику, но другой пользователь, очевидно, может иметь другую статистику. Однако для размещения текста я использую такие вещи, как:

window.blit(text, (ScreenWidth/2 - text.get_rect().width/2, ScreenHeight*0.6))

, чтобы получить его в середине экрана. Если разрешение будет изменено, расположение текста тоже будет.

Иногда я также использую такие вещи, как:

window.blit(text, (ScreenWidth/2 - text.get_rect().width/2-500, ScreenHeight*0.6))

для перемещения текста влево. Если экран имеет ширину 720 (например), он не будет виден. Но так как я здесь работаю с относительными позициями, оригинального макета / дизайна больше не будет. Кто-нибудь знает, как я могу «перемасштабировать» игровой экран, чтобы он «автоматически» изменял мою позицию текста, если это имеет смысл :)?

1 Ответ

0 голосов
/ 02 мая 2018

Это базовая алгебра: вы масштабировали среднюю точку экрана, но не масштабировали движение до новых размеров экрана. Поскольку вы не указали, что означает "моя текущая статистика отображения" в фактических значениях, то ...

width_factor  = ScreenWidth  / my_current_display_width
height_factor = ScreenHeight / my_current_display_height
move_dist = 500 * width_factor
new_x = ScreenWidth/2 - text.get_rect().width/2 - 500
window.blit(text, (new_x, ScreenHeight*0.6))

Я очень подозрительно отношусь к этой магии 0.6, которую вы добавили; откуда это происходит? Это должно быть height_factor?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...