AttributeError: объект 'pygame.math.Vector2' не имеет атрибута

avatar
ZamaaN
9 мая 2021 в 15:34
315
2
2

Невозможно нарисовать еду из-за ошибки pygame "AttributeError: объект 'pygame.math.Vector2' не имеет атрибута". Не могу понять, что я пропустил... помогите мне избавиться от этого. Мой код здесь:

import pygame, sys
from pygame.locals import *
from pygame.math import Vector2

class Food:
    def __init__(self):
        self.food_x = 5
        self.food_y = 4
        self.position = Vector2(self.food_x, self.food_y)

    def draw_food(self):
        food_shape = pygame.Rect(self.position.food_x, self.position.food_y, cell_size, cell_size)
        pygame.draw.rect(screen, screen_surface_color, food_shape)

cell_size = 40
cell_number = 19
screen_color = (175, 215, 70)
screen_surface_color = (70, 70, 214)

pygame.init()
screen = pygame.display.set_mode((cell_number * cell_size, cell_number * cell_size))
clock = pygame.time.Clock()

food = Food()

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            if event.key == K_ESCAPE:
                pygame.quit()
                sys.exit()
    
        elif event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    screen.fill(screen_color)
    food.draw_food()
    pygame.display.update()
    clock.tick(60)

Я получаю сообщение об ошибке:

Traceback (most recent call last):
File "e:\archive_root\CSE\Python\portfolio_py\projects_py\games_py\snake2_py\snake_game2.py", line 39, in <module>
food.draw_food()
File "e:\archive_root\CSE\Python\portfolio_py\projects_py\games_py\snake2_py\snake_game2.py", line 12, in draw_food
food_shape = pygame.Rect(self.position.food_x, self.position.food_y, cell_size, cell_size)
AttributeError: 'pygame.math.Vector2' object has no attribute 'food_x'
Источник

Ответы (2)

avatar
Eno Gerguri
9 мая 2021 в 15:41
1

pygame.math.Vector2 не имеет атрибута flood_x, я думаю, вы имеете в виду атрибуты x и y, которые он имеет:

class Food:
    def __init__(self):
        self.food_x = 5
        self.food_y = 4
        self.position = Vector2(self.food_x, self.food_y)

    def draw_food(self):
        food_shape = pygame.Rect(self.position.x, self.position.y, cell_size, cell_size)  # position.x not position.flood_x
        pygame.draw.rect(screen, screen_surface_color, food_shape)

см. Pygame Docs для Vector2 здесь

avatar
Rabbid76
9 мая 2021 в 15:44
1

Еда имеет атрибуты food_x и food_y, но векторный объект position имеет атрибуты x и y:

food_shape = pygame.Rect(self.position.food_x, self.position.food_y, cell_size, cell_size)

food_shape = pygame.Rect(self.position.x, self.position.y, cell_size, cell_size)