首页 > 解决方案 > 不明白为什么物体从墙上反弹/ 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()

标签: pythonobjectpygame

解决方案


所以rect物体代表了dvd_logo图像的位置和大小。在每一帧中,代码检查leftofrect是否小于零(窗口的左边缘)、是否right大于width(窗口的右边缘)、是否top小于零(窗口的顶部边缘)或bottom大于height(底部窗口边缘)。如果leftorright超出左边缘或右边缘,则(左/右速度)被否定,move_speed[0]对于top/也是如此。bottommove_speed[1]

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


推荐阅读