【发布时间】:2021-07-27 05:17:50
【问题描述】:
我刚接触 Python,在检测两个矩形之间的碰撞时遇到了一些麻烦。我希望一个矩形在碰撞时从另一个矩形反弹
到目前为止,这是我的代码:
import pygame
import sys
from pygame.locals import *
pygame.init()
ww = 400
wh = 300
w = pygame.display.set_mode((ww,wh))
pygame.display.set_caption('OFK')
s = pygame.display.get_surface()
green = pygame.Color(152,251,152)
blue = pygame.Color(135,206,250)
white = pygame.Color(255,255,240)
clock = pygame.time.Clock()
background_file = 'ice-in-water.jpg'
background_image = pygame.image.load(background_file).convert()
rx = ww/2
ry = wh/2
rw = 30
rh = 20
px = ww/2
py = wh - 40
pw = 60
ph = 10
vdirection = -1
hdirection = 1
while True:
clock.tick(60)
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
quit()
if event.type == KEYDOWN:
#print (event.key,event.unicode)
if event.key == 275:
px = px + 30
if px > ww - pw:
px = ww - pw
if event.key == 276:
px = px - 30
if px < 0:
px = 0
s.fill(green)
pygame.draw.rect(s,blue,(rx,ry,rw,rh),0)
pygame.draw.rect(s,white,(px,py,pw,ph),0)
#w.blit(background_image,(-80,0))
pygame.display.update()
#mx,my = pygame.mouse.get_pos()
#print ("x: ", mx, "y: ", my)
#print ("ry: ", ry, "wh: ", wh)
rx = rx + 1.5 * hdirection
if rx > ww - rw:
hdirection = -hdirection
if rx < 0:
hdirection = -hdirection
ry = ry + 1.5 * vdirection
if ry > ww:
rx = ww/2
ry = wh/2
vdirection = -vdirection
if ry < 0:
vdirection = -vdirection
我已尝试查找有关如何执行此操作的教程,但我不能很好地理解。一点帮助将不胜感激。
【问题讨论】:
-
您的确切问题是什么,或者您的代码有什么问题?
-
对不起。我怎样才能让矩形在碰到另一个矩形时反弹它。
-
是的,明白了。看起来你已经尝试在上面的代码中实现它,它的哪一点不起作用?
-
我正在尝试创建一个简单版本的破砖机。到目前为止,我的代码只能使“球”(即矩形)从墙上反弹,但我希望它也能从桨(第二个矩形)反弹。
-
youtube.com/watch?v=jeZkAKtDIX0 这里是碰撞检测教程。
标签: python pygame collision-detection