阻止对象在 pygame 中出现故障

问题描述 投票:0回答:1

我正在尝试使用 pygame 制作一款像 pong 这样的游戏,我目前有两个矩形,但是有一个小故障我不知道为什么,我评论过

win.fill((0, 0, 0))
并且它阻止了其中一个矩形出现故障,但另一个矩形却没有,这就是我的问题有:

# import pygame module in this program
import pygame

# activate the pygame library .
# initiate pygame and give permission
# to use pygame's functionality.
pygame.init()

# create the display surface object
# of specific dimension..e(500, 500).
win = pygame.display.set_mode((1280, 720))

# set the pygame window name
pygame.display.set_caption("Pong")

# object1 current co-ordinates
x = 15
y = 280
# object2 current co-ordinates
x1 = 1245
y1 = 280
# dimensions of the object1
width = 20
height = 130
# dimensions of the object2
width1 = 20
height1 = 130
# velocity / speed of movement
vel = 10

# Indicates pygame is running
run = True

# infinite loop
while run:
    # creates time delay of 10ms
    pygame.time.delay(0)

    # iterate over the list of Event objects
    # that was returned by pygame.event.get() method.
    for event in pygame.event.get():

        # if event object type is QUIT
        # then quitting the pygame
        # and program both.
        if event.type == pygame.QUIT:

            # it will make exit the while loop
            run = False
    # stores keys pressed
    keys = pygame.key.get_pressed()

    # if left arrow key is pressed
    if keys[pygame.K_w] and y > 0:

        # decrement in y co-ordinate
        y -= vel

    # if left arrow key is pressed
    if keys[pygame.K_s] and y < 720-height:
        # increment in y co-ordinate
        y += vel

    # completely fill the surface object
    # with black colour
    win.fill((0, 0, 0))
    # drawing object on screen which is rectangle here
    pygame.draw.rect(win, (0, 0, 255), (x, y, width, height))

    # it refreshes the window
    pygame.display.update()

    keys2 = pygame.key.get_pressed()

    # if left arrow key is pressed
    if keys2[pygame.K_UP] and y1 > 0:

        # decrement in y co-ordinate
        y1 -= vel

    # if left arrow key is pressed
    if keys2[pygame.K_DOWN] and y1 < 720-height:
        # increment in y co-ordinate
        y1 += vel

    # completely fill the surface object
    # with black colour
    win.fill((0, 0, 0))

    # drawing object on screen which is rectangle here
    pygame.draw.rect(win, (255, 255, 255), (x1, y1, width1, height1))

    # it refreshes the window
    pygame.display.update()

# closes the pygame window
pygame.quit()
python pygame
1个回答
0
投票

仅在应用程序循环结束时调用

pygame.display.update()
一次。多次调用
pygame.display.update()
pygame.display.flip()
会导致闪烁。请参阅为什么 PyGame 动画闪烁。每帧仅清除一次显示。
您实际上是在
Surface
对象上绘图。如果您在与 PyGame 显示关联的 Surface 上绘图,则这不会立即在显示中可见。当使用
pygame.display.update()
pygame.display.flip()
更新显示时,更改将变得可见。 如果清除显示,所有先前绘制的元素将变得不可见。因此,在帧开始时清除显示一次,并在帧结束时更新一次。

典型的 PyGame 应用程序循环必须:

clock = pygame.time.Clock()
run = True

# application loop
while run:
    # limit the frames per second to limit CPU usage
    clock.tick(100)

    # handle the events    
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    # update the game states and positions of objects
    keys = pygame.key.get_pressed()
    if keys[pygame.K_w] and y > 0:
        y -= vel
    if keys[pygame.K_s] and y < 720-height:
        y += vel
    if keys[pygame.K_UP] and y1 > 0:
        y1 -= vel
    if keys[pygame.K_DOWN] and y1 < 720-height:
        y1 += vel

    # clear the display
    win.fill((0, 0, 0))

    # draw the entire scene
    pygame.draw.rect(win, (0, 0, 255), (x, y, width, height))
    pygame.draw.rect(win, (255, 255, 255), (x1, y1, width1, height1))

    # update the display
    pygame.display.update()
© www.soinside.com 2019 - 2024. All rights reserved.