2014-12-26 6 views
0

Я делаю программу, и я хочу изменить размер окна без потери содержимого. В каком-то смысле я хочу обрезать окно. Это нормально, если контент отключен. Вот что я пытаюсь сделать:Изменение размера окна Pygame без потери содержимого

from pygame import * 
main = display.set_mode((800,600)) 
main.fill((255,255,255)) 
running = True 
while running: 
    mx, my = mouse.get_pos() 
    mb = mouse.get_pressed() 
    for e in event.get(): 
     if e.type == QUIT: 
      running = False 
    if mb[0] == 1: 
     draw.circle(main, (102,204,102), (mx, my), 10) 
    elif mb[2] == 1: 
     main = display.set_mode((200,200)) 
    display.flip() 
quit() 

Когда я изменяю экран, он не показывает, что я нарисовал на экране. Как я могу сохранить контент и «обрезать» контент при изменении размера экрана? Благодарю.

+0

Вы хотите обрезать содержимое с правой и нижней сторон? – pts

+0

Просто снизу. Я использовал оба в приведенном выше примере, хотя это не моя настоящая программа. Я просто хочу изменить размер по высоте, отрегулировав снизу – sirvar

+0

Вы не должны использовать 'main = display.set_mode'. Он создаст только другой экран, а не уменьшит его. –

ответ

0

На самом деле это невозможно. Модули будут создавать только новый экран и удалять старый, включая круги. Я пытался часами, но pygame документирует только список модулей, которые создают и удаляют экраны. Настолько неудовлетворительно, что вы не можете изменить размер экрана, не удаляя старый и не создавая новый.

0

Во-первых, поскольку вы хотите сделать свой экран повторно значимым, убедитесь, что вы добавили флаг RESIZABLE при инициализации экрана.

main = display.set_mode((800,600), RESIZABLE, 32) 

Когда это будет инициализировано, ваше окно станет повторно значимым. Но теперь вы можете получить доступ к новому размеру вашего экрана с помощью события VIDEORESIZE, которое отправляется при каждом изменении размера экрана.

for e in event.get(): 
    if e.type == QUIT: 
     running = False 
    if e.type == VIDEORESIZE: 
     print e.w, e.h, e.size 


Теперь вы можете увидеть новые размеры окна. Я также предлагаю удалить

elif mb[2] == 1: 
    main = display.set_mode((200,200)) 

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

+0

Вы специально хотите, чтобы размер экрана равен 200x200? Или это может быть «динамическим»? – SirBob

+0

Я хочу, чтобы он в основном переключался между двумя размерами экрана при нажатии кнопки. Я не показывал это в своем коде, но в своей реальной программе я это делаю. Итак, с примером SirBob, как я могу изменить размер, а не пользователь? – sirvar

Смежные вопросы