找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 1551|回复: 2

[求助] pygame碰撞检测无法检测碰撞?

1

主题

1

帖子

1

积分

贫民

积分
1
1264459066 发表于 2021-5-22 18:27:15 | 显示全部楼层 |阅读模式
最近自己写了个pygame的碰撞检测,但是似乎出了BUG,求解决
代码如下:
import pygame
from pygame.locals import *
import sys
import random

pygame.init()
screen = pygame.display.set_mode((1000, 700))


class Ball1(pygame.sprite.Sprite):
def __init__(self, image, position, speed):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load(image)
self.rect = self.image.get_rect()
self.rect.left, self.rect.top = position
self.speed = speed

def move(self):
self.rect.left += speed[0]
self.rect.top += speed[1]
if self.rect.left <= 0 or self.rect.right >= 1000:
speed[0] = -speed[0]
if self.rect.top <= 0 or self.rect.bottom >= 700:
speed[1] = -speed[1]


class Ball2(pygame.sprite.Sprite):
def __init__(self, image, position, speed):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load(image)
self.rect = self.image.get_rect()
self.rect.left, self.rect.top = position
self.speed = speed

def move(self):
self.rect.left += speed2[0]
self.rect.top += speed2[1]
if self.rect.left <= 0 or self.rect.right >= 1000:
speed2[0] = -speed2[0]
if self.rect.top <= 0 or self.rect.bottom >= 700:
speed2[1] = -speed2[1]


image1 = "ball1.png"
image2 = "ball2.png"
position = [random.randint(0, 600), random.randint(0, 500)]
position2 = [random.randint(0, 600), random.randint(0, 500)]
speed = [5, 5]
speed2 = [5, 5]

ball1 = Ball1(image1, position, speed)
ball2 = Ball2(image2, position2, speed2)

if pygame.sprite.collide_rect(ball1, ball2):
print("已发生碰撞")

clock = pygame.time.Clock()
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
screen.fill((200, 200, 200))

screen.blit(ball1.image, ball1.rect)
screen.blit(ball2.image, ball2.rect)

ball1.move()
ball2.move()

clock.tick(90)
pygame.display.flip()
主要问题:无法检测碰撞

回复

使用道具 举报

0

主题

18

帖子

18

积分

贫民

积分
18
宫崎峻Miyazaki 发表于 2021-7-30 22:01:54 | 显示全部楼层
你这何止进行不了碰撞检测,还报错了
回复 支持 反对

使用道具 举报

1419

主题

1891

帖子

291

积分

侠客

积分
291

最佳新人热心会员默默耕耘

whydo1 发表于 2021-7-31 15:37:19 | 显示全部楼层
if pygame.sprite.collide_rect(ball1, ball2):

把这个判断语句放到 while True循环里面
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表