Как я могу использовать Pygame get_size ()? - PullRequest
0 голосов
/ 21 декабря 2018

Я кодирую заставку DVD на python, но у меня проблемы с получением размера окна из pygame.Я использовал Info (), get_size (), get_width () и get_height (), ни одно из которых не меняется, когда я изменяю размер окна.

Я кодирую это в Python 3.5.3, я попытался переустановитьpygame и затем я попытался переключиться на python 3.6 и установить pygame для этого, но ничего не помогло.

import pygame as p, random as r, time as t, sys

width, height = 640, 480 #Initial screen width & height
x, y, vel = 0, 0, [1, 1] #Makes coordinates and velocity
DVD = p.image.load('sprites\\w.png') #Loads a sprite
DVDRECT = DVD.get_rect() #Makes object for the sprites to be loaded onto
screen = p.display.set_mode((width, height),p.RESIZABLE) #Sets screen to resizable mode
p.display.set_caption('DVD')#Sets executable capton
p.init() #Initialize Pygame

x, y = r.randint(200, 400), r.randint(200, 400) #sets the start location

#Loads in sprites
wht = p.image.load('sprites\\w.png')
blu = p.image.load('sprites\\b.png')
pnk = p.image.load('sprites\\p2.png')
pur = p.image.load('sprites\\p.png')
grn = p.image.load('sprites\\g.png')
org = p.image.load('sprites\\o.png')
ylw = p.image.load('sprites\\y.png')
p.display.set_icon(wht)

def new_color():
    """
    Function for getting random colors
    """
    return r.choice([wht, blu, pnk, pur, grn, org, ylw])

while True:
    print(screen.get_size())
    for event in p.event.get():
        if event.type == p.QUIT:
            p.quit()
            sys.exit()
    #Makes new coordinates:
    x += vel[0]
    y += vel[1]

    #Checks if logo hits a wall
    if x >= width-29:
        vel[0] = -vel[0] #Makes logo 'bounce' off wall
        DVD = new_color() #Sets a new color to the logo
        p.display.set_icon(DVD)

    if x <= 29:
        vel[0] = -vel[0]
        DVD = new_color()
        p.display.set_icon(DVD)

    if y >= height-19:
        vel[1] = -vel[1]
        DVD = new_color()
        p.display.set_icon(DVD)

    if y <= 19:
        vel[1] = -vel[1]
        DVD = new_color()
        p.display.set_icon(DVD)

    DVDRECT.center = (x, y) #moves the logo
    screen.fill((0, 0, 0)) #sets background to black
    screen.blit(DVD, DVDRECT) #Updates logo
    p.display.flip() #flips screen
    t.sleep(1.0/80.0) #waits certian time between frames

Я ожидал, что выходные данные print (screen.get_size ()) изменятся, когда я изменю размер окна,но кортеж, который он показывает, остается (640, 480) независимо от того, что я делаю с окном.

1 Ответ

0 голосов
/ 24 декабря 2018

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

    if event.type == p.VIDEORESIZE:
        scrsize = event.size
        screen = p.display.set_mode(scrsize, p.RESIZABLE)
        width, height = scrsize[0], scrsize[1]
        if DVDRECT.center[0] >= width-29:
            y = DVDRECT.center[1]
            x = width-30
            DVDRECT.center = (x, y)
        if DVDRECT.center[1] >= height-19:
            y = height-20
            DVDRECT.center = (x, y)
        corners = [(width-29, height-19), (29, 19), (width-29, 19), (29, height-19)]

Отсюдакод работает нормально.

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