如何在pygame中添加检测冲突



我在我的文件中发现了这个未完成的文件,现在我需要完成它,唯一的问题是idk,我真的如何检测与子弹和玩家的东西和/或子弹和敌人的东西的碰撞,当子弹与敌人碰撞时,它仍然会死亡,我只是不记得如何。

这是代码ig帮助感谢

import pygame, os, random,sys
pygame.init()

FPS=60
SCREEN = pygame.display.set_mode((400,500))
pygame.display.set_caption('caption')
x=50
y=450
vel = 3
width = 20
height = 20
class Player(pygame.sprite.Sprite):
def __init__(self,x,y,width,height):
super().__init__()
self.x = x
self.y = y
self.vel = 4
self.image = pygame.Surface((width, height))
self.image.fill((0,0,0))
self.rect = self.image.get_rect(topleft = (x, y))

class B(pygame.sprite.Sprite):
def __init__(self,x,y,radius, color):
super().__init__() 
self.x = x
self.y = y
self.color = color
self.radius = radius
self.vel = vel
self.image = pygame.Surface((self.radius * 2, self.radius * 2), pygame.SRCALPHA)
pygame.draw.circle(self.image, self.color, (self.radius, self.radius), self.radius)
self.rect = self.image.get_rect(center = (self.x, self.y))

class Enemy(pygame.sprite.Sprite):
def __init__(self):
super().__init__() 
self.image = pygame.Surface((20,20))
self.image.fill((255, 0, 0))
y = random.randrange (0, 480)
x = 400
self.rect = self.image.get_rect(topleft = (x, y))
self.speed = random.randrange(1,2)

player = Player(x, y, width, height)
enemies = pygame.sprite.Group()
bullets = pygame.sprite.Group()
all_sprites = pygame.sprite.Group()
all_sprites.add(player)
score = 0
# main loop
running = True
clock = pygame.time.Clock()
while running:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE and len(bullets) < 8:
bullet = B(player.rect.centerx, player.rect.centery, 2, (0,0,0))
bullets.add(bullet)
all_sprites.add(bullet)

if len(enemies) < 2:
e = Enemy()
enemies.add(e)
all_sprites.add(e)
for bullet in bullets:
if bullet.rect.right < 500:
bullet.rect.x += bullet.vel
else:
bullet.kill()
for enemy in enemies:
if enemy.rect.right > 0:
enemy.rect.x -= enemy.speed
else:
enemy.kill()
print ("L")
pygame.quit()
sys.exit()


pygame.sprite.groupcollide(bullets, enemies, True, True)


keys = pygame.key.get_pressed()            
if keys[pygame.K_UP] and player.rect.top > player.vel:
player.rect.y -= player.vel
if keys[pygame.K_DOWN] and player.rect.bottom < 500 - player.vel:
player.rect.y += player.vel

SCREEN.fill((190, 232, 220))
all_sprites.draw(SCREEN)
pygame.display.update()
pygame.quit()

碰撞检测取决于您的需要。

  • 边界框很简单,可以检测每个对象的x、y边是否不在一起。这对于快速移动的游戏和不一定需要点精度的东西来说很好
  • 距离矢量也是圆碰撞的简单而完美的解决方案。他们根据用distX^2+distY^2的斜边规定的半径计算两个物体之间的距离差
  • 复合边界对象更难计算,尤其是对于任意形状的对象上的凹入区域。除了这些之外,还有太多值得注意的新颖碰撞检测方法

它们也越来越复杂,这取决于可变性(如果它们是可变形的物体,如果它们有粒子接缝等(以及二维与三维物体碰撞也可能是截然不同的世界。有很多文章,但我会在这里发布一篇实现的文章

最新更新