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))

Как исправить? Смотрел об этой ошибке везде где только можно, но решения не нашёл. Спасибо заранее.


Ответы (0 шт):