不明白为什么物体会从墙上弹回/ Pygame

时间:2019-11-26 00:11:19

标签: python object pygame

因此,我试图在pygame上进行DVD弹跳,但无法将其撞到墙上弹跳,但我最终找到了别人的方法并使用了它,但我不知道为什么它真正起作用了,我不明白为什么DVD徽标实际上会弹起。如果有人可以帮助,将不胜感激。


import pygame
import os


os.chdir("C:\\Users\\user\\Documents\\Pythonscript\\DVD")

pygame.init()


def gameloop():

    width = 600
    height = 500
    screen = pygame.display.set_mode((width, height))
    pygame.display.set_caption('DVD')
    black = (0,0,0)
    dvd_logo = pygame.image.load("DVD Red.png")
    rect = dvd_logo.get_rect()
    clock = pygame.time.Clock()                             
    game = False
    move_speed = [2, 2]

    while not game:
            for event in pygame.event.get():
                    if event.type == pygame.QUIT:
                            game= True

            if rect.left < 0:
                move_speed[0] = -move_speed[0]
                dvd_logo = pygame.image.load("DVD Pink.png")
            if rect.right > width:
                move_speed[0] = -move_speed[0]
                dvd_logo = pygame.image.load("DVD Blue.png")
            if rect.top < 0:
                move_speed[1] = -move_speed[1]
                dvd_logo = pygame.image.load("DVD Yellow.png")
            if rect.bottom > height:
                move_speed[1] = -move_speed[1]
                dvd_logo = pygame.image.load("DVD Red.png")

            rect.left += move_speed[0]
            rect.top += move_speed[1]       
            screen.fill(black)
            screen.blit(dvd_logo, rect)
            pygame.display.flip()
            clock.tick(60)


gameloop()      
pygame.quit()
quit()

1 个答案:

答案 0 :(得分:1)

因此rect对象代表dvd_logo图像的位置和大小。在每一帧中,代码检查left的{​​{1}}是否小于零(窗口的左边缘),如果rect大于right(窗口的右边缘) ),如果width小于零(窗口的上边缘),或者top大于bottom(窗口的下边缘)。如果heightleft超出了左边缘或右边缘,则right(左/右速度)被取反,对于move_speed[0] / {{ 1}}和top

如果您的move_speed [0]为-2(向左移动)并且bottom小于零,则move_speed[1]变为rect.left,因此它将向右移动而不是向左移动。同样,top / bottom和move_speed [1]的概念相同。