TypeError: Argument must be rect style object
В общем. Я делаю игру на python3 с библиотекой pygame. Я дошёл до той части, в которой мне надо осуществить столкновения игрока с другими объектами, то есть с врагами. Если столкновение произоёдет, то игра должна заканчиваться.
Вот исходный код:
import pygame
import random
pygame.init()
w1 = pygame.display.set_mode((500, 500)) # main window
clock = pygame.time.Clock() # FPS
width = 30 # player's width
height = 70 # player's height
x = 235 # player's x pos
y = 422 # player's y pos
speed = 7 # player's speed
lastMove = 'top'
enemy_speed = 5 # enemy speed
class snaryad(): # for make bullets
def __init__(self, x, y, radius, color, facing):
self.x = x
self.y = y
self.radius = radius
self.color = color
self.facing = facing
self.vel = 8 * facing
def draw(self, w1):
pygame.draw.circle(w1, self.color, (self.x, self.y), self.radius)
class enemies(): # for make enemies
def __init__(self, enem_x, enem_y, enem_width, enem_height):
self.enem_x = enem_x
self.enem_y = enem_y
self.enem_width = enem_width
self.enem_height = enem_height
def draw_enemy(self, w1):
pygame.draw.rect(w1, (255, 0, 0), (round(self.enem_x), round(self.enem_y),
round(self.enem_width), round(self.enem_height)))
run = True # run game
# is_enemy_killed = 'alive'
bullets = []
enemies_arr = []
def draw_objects():# draw all objects
w1.blit(main_position, (x, y))
for bullet in bullets: # drawing bullets
bullet.draw(w1)
for enemy in enemies_arr: # drawing enemies
enemy.draw_enemy(w1)
pygame.display.update()
while run:
clock.tick(60) # FPS init
# physics part
for event in pygame.event.get(): # QUIT the game
if event.type == pygame.QUIT:
run = False
for enemy in enemies_arr: # enemies moving
if enemy.enem_y <= 500:
enemy.enem_y += 1.5
else:
enemy.enem_y = 7
for bullet in bullets: # bullets physics
if bullet.y < 500 and bullet.y > 0:
bullet.y -= bullet.vel
else:
bullets.pop(bullets.index(bullet))
for enemy in enemies_arr:
hits = rect_1.colliderect(enemy)
if hits:
run = False
keys = pygame.key.get_pressed() # main part
if len(enemies_arr) <= 8: # spawning enemies
enemies_arr.append(enemies(random.randrange(10, 450), random.randrange(10, 100), 40, 20))
if keys[pygame.K_f]: # to create bullets
if lastMove == 'top':
facing = 1
else:
facing = 1
if len(bullets) <= 20:
bullets.append(snaryad(round(x + height // 2), round(830 // 2), 5, (255, 0, 0), facing)))
if keys[pygame.K_LEFT] and x > 5:
x -= speed
lastMove = 'top'
if keys[pygame.K_RIGHT] and x < 500 - width - 33:
x += speed
lastMove = 'top'
w1.fill([0, 0, 0])
main_position = pygame.image.load('корабль.png')
rect_1 = pygame.draw.rect(w1, (0, 0, 0), [x, y, 60, 70])
pygame.display.update()
draw_objects()
pygame.quit()
Выдаёт ошибку: TypeError: Argument must be rect style object (не работает строка 86 -- hits = rect_1.colliderect(enemy))
Как исправить? Смотрел об этой ошибке везде где только можно, но решения не нашёл. Спасибо заранее.