我想知道碰撞检测在pygame中是如何工作的,在一个足球游戏中多边形和一个圆之间。我要做的是,让一个球朝着汽车撞到的方向移动。有人能帮我修好代码吗,我被卡住了!!。如果您运行以下代码,两辆车将移动,但如果它们撞到球,则不会发生任何事情,也不会出现错误消息(第26行是我尝试使其工作的代码)。首先,我只想把它打印出来(“你好”)。如果有人能帮忙我会很感激的。 谢谢你
import pygame
from pygame.math import Vector2
pygame.init()
screen = pygame.display.set_mode((1150, 800))
redx = 50
redy = 30
bluex = 100
bluey = 30
clock = pygame.time.Clock()
BLUECAR_ORIGINAL = pygame.Surface((bluex, bluey), pygame.SRCALPHA)
pygame.draw.polygon(
BLUECAR_ORIGINAL, (0, 0, 255), [(0, 30), (50, 20), (50, 10), (0, 0)])
bluecar = BLUECAR_ORIGINAL
REDCAR_ORIGINAL = pygame.Surface((redx,redy), pygame.SRCALPHA)
pygame.draw.polygon(
REDCAR_ORIGINAL, (255, 0, 0), [(0, 0), (50, 10), (50, 20), (0, 30)])
redcar = REDCAR_ORIGINAL
def paddle_hit():
if pygame.sprite.collide_rect(ball, bluerect):
print("HI")
elif pygame.sprite.collide_rect(ball, redrect):
print("hello")
pos = Vector2(70, 70)
vel = Vector2(7, 0)
poss = Vector2(70,70)
vell = Vector2(7,0)
redrect = redcar.get_rect(center=pos)
redangle = 0
bluerect = bluecar.get_rect(center=pos)
blueangle = 0
ballx = 575
bally = 400
run = True
while run:
ball = pygame.draw.circle(screen, [0,0,0],[ballx,bally],30)
pygame.display.flip()
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
redangle += 5
vel.rotate_ip(-5)
redcar = pygame.transform.rotate(REDCAR_ORIGINAL, redangle)
redrect = redcar.get_rect(center=pos)
elif keys[pygame.K_RIGHT]:
redangle -= 5
vel.rotate_ip(5)
redcar = pygame.transform.rotate(REDCAR_ORIGINAL, redangle)
redrect = redcar.get_rect(center=pos)
if keys[pygame.K_a]:
blueangle += 5
vell.rotate_ip(-5)
bluecar = pygame.transform.rotate(BLUECAR_ORIGINAL, blueangle)
bluerect = bluecar.get_rect(center=pos)
elif keys[pygame.K_d]:
blueangle -= 5
vell.rotate_ip(5)
bluecar = pygame.transform.rotate(BLUECAR_ORIGINAL, blueangle)
bluerect = bluecar.get_rect(center=poss)
pos += vel
redrect.center = pos
poss += vell
bluerect.center = poss
bgImg = pygame.image.load("Football_pitch.png")
screen.blit(bgImg, (0,0))
screen.blit(redcar, redrect)
screen.blit(bluecar, bluerect)
pygame.display.flip()
clock.tick(60)
pygame.quit()
我已经编写了一个新的python库,用于凹凸多边形和圆之间的碰撞检测。它工作得很好,而且效率很高。它的使用非常简单,存储库中有一些示例,以及文档。在
https://github.com/QwekoDev/collision
可以使用遮罩进行碰撞检测,并将球的速度设置为碰撞球员的速度。在
为球、红色和蓝色汽车创建^{} 对象(使用^{} )对象(当汽车旋转时,必须创建新的遮罩)。在
在} 方法查看它们是否重叠。如果掩码发生冲突,则返回冲突点,否则
while
循环中,计算汽车和球之间的偏移量,然后调用^{None
。所以如果overlap
不返回None
,你可以将球的速度设置为球员的速度,球就会朝同一方向移动。缩放速度矢量以踢球。在相关问题 更多 >
编程相关推荐