python - 不明白为什么物体从墙上反弹/ 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()
解决方案
所以rect
物体代表了dvd_logo
图像的位置和大小。在每一帧中,代码检查left
ofrect
是否小于零(窗口的左边缘)、是否right
大于width
(窗口的右边缘)、是否top
小于零(窗口的顶部边缘)或bottom
大于height
(底部窗口边缘)。如果left
orright
超出左边缘或右边缘,则(左/右速度)被否定,move_speed[0]
对于top
/也是如此。bottom
move_speed[1]
如果您的 move_speed[0] 为 -2(向左移动)并且rect.left
小于零,move_speed[0]
则变为2
,因此它将向右移动而不是向左移动。同样,顶部/底部和 move_speed[1] 的概念相同。
推荐阅读
- java - 如何卸载以前使用 jar 文件安装的 Netbeans 8.2 ide?
- docusignapi - 如何在多个文档上应用相同的 EnvelopeTabs
- jquery - jquery创建对象动态不起作用
- c# - 在.Net Mvc C#中递归执行的动作过滤器
- speex - 如何将 .wav 转换为 .spx(speex) 文件
- javascript - Nuxt js客户端特定布局加载
- javascript - 如何将文件从 URL 保存到 blob
- azure-functions - Power 应用程序中的 Azure 函数响应返回真/假而不是值
- android - 使用 TensorflowInterfenceInterface 方法时无法解析方法“feed”
- gerrit - Gerrit 中没有修改的更改