Python 调用冲突检测函数时,应该输入哪些参数?

Python 调用冲突检测函数时,应该输入哪些参数?,python,function,pygame,Python,Function,Pygame,我在游戏循环的第42行调用check_collision()。这样做的目的是检查两个矩形(游戏中的两个玩家)是否发生碰撞。我不清楚的是我应该用什么论据。我认为使用两个矩形的XY坐标是行不通的,我也不知道有什么方法可以将矩形指定给可以用作参数的变量。任何帮助都将不胜感激 代码: import pygame,sys pygame.init() win=pygame.display.set_模式((500500)) clock=pygame.time.clock() 类播放器(): 定义初始(自身、x

我在游戏循环的第42行调用check_collision()。这样做的目的是检查两个矩形(游戏中的两个玩家)是否发生碰撞。我不清楚的是我应该用什么论据。我认为使用两个矩形的XY坐标是行不通的,我也不知道有什么方法可以将矩形指定给可以用作参数的变量。任何帮助都将不胜感激

代码:

import pygame,sys
pygame.init()
win=pygame.display.set_模式((500500))
clock=pygame.time.clock()
类播放器():
定义初始(自身、x、y、宽度、高度、速度):
self.x=x
self.y=y
self.width=宽度
自我高度=高度
自身速度=速度
def向上移动(自):
通过
#更多样板运动代码
def检查_碰撞(播放器1、播放器2):
check=pygame.sprite.collide_rect(player1,player2)
如果check==True:
sys.exit()
敌人=玩家(30,30,60,60,5)
个人=玩家(0,0,60,60,5)
游戏循环=正确
当game_loop==True时:
时钟滴答(60)
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
博弈循环=错误
keys=pygame.key.get_pressed()
如果键[pygame.K_a]:
#样板运动代码
通过

person.check#collision()#你可以像
person.check#collision(敌人)
那样称呼它。然而,这根本不起作用


不能使用,因为
player1
player2
不是对象。但是,您可以创建对象并使用:

class Player():
# [...]
def检查碰撞(自身,enmey):
self_rect=pygame.rect(self.x、self.y、self.width、self.height)
enmey_rect=pygame.rect(enmey.x,enmey.y,enmey.width,enmey.height)
如果自校正。冷却校正(enmey校正):
sys.exit()
敌人=玩家(30,30,60,60,5)
个人=玩家(0,0,60,60,5)
游戏循环=正确
当game_loop==True时:
# [...]
人员。检查碰撞(敌人)
另见


通过删除属性
x
y
width
height
,您可以大大简化代码,但要添加属性
rect

class Player():
定义初始(自身、x、y、宽度、高度、速度):
self.rect=pygame.rect(x,y,宽度,高度)
自身速度=速度
def向上移动(自):
通过
#更多样板运动代码
def检查碰撞(自身,enmey):
如果self.rect.collide rect(enmey.rect):
sys.exit()
import pygame, sys

pygame.init()

win = pygame.display.set_mode((500, 500))

clock = pygame.time.Clock()

class Player():
  def __init__(self, x, y, width, height, speed):
    self.x = x
    self.y = y
    self.width = width
    self.height = height
    self.speed = speed
  
  def movement_up(self):
    pass
    #more boilerplate movement code

  def check_collision(player1, player2):
    check = pygame.sprite.collide_rect(player1, player2)
    if check == True:
      sys.exit()

enemy = Player(30, 30, 60, 60, 5)
person = Player(0, 0, 60, 60, 5)

game_loop = True
while game_loop == True:
  clock.tick(60)
  for event in pygame.event.get():
    if event.type == pygame.QUIT:
      game_loop = False

  keys = pygame.key.get_pressed()

  if keys[pygame.K_a]:
    #boilerplate movement code
    pass

  person.check_collision()  # <-- what to put here

  win.fill((0, 0, 0))
  pygame.draw.rect(win, (255, 0, 0), (person.x, person.y, person.width, person.height))
  pygame.draw.rect(win, (0, 0, 255), (enemy.x, enemy.y, enemy.width, enemy.height))
  pygame.display.update()

pygame.quit()