如何解决AttributeError: 'pygame.math.Vector2' 对象没有属性
无法绘制食物,因为 pygame 错误“AttributeError: 'pygame.math.Vector2' object has no attribute”。不知道我错过了什么......帮我摆脱它。 我的代码在这里:
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,cell_size)
AttributeError: 'pygame.math.Vector2' object has no attribute 'food_x'
解决方法
import sys
import pygame
from pygame import *
import cv2
pygame.init()
screen = pygame.display.set_mode((226,318))
player_pos = [95,292]
player = pygame.image.load('Player.png').convert()
player.set_colorkey((255,255,255))
level1 = list(cv2.imread('Map1.png')) # the image
moving_right = False
moving_left = False
moving_up = False
moving_down = False
clock = pygame.time.Clock()
while True:
screen.fill((15,15,15))
player_rect = screen.blit(player,player_pos)
if moving_right == True:
player_pos[0] += 2
if moving_left == True:
player_pos[0] -= 2
if moving_up == True:
player_pos[1] -= 2
if moving_down == True:
player_pos[1] += 2
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == KEYDOWN:
if event.key == K_RIGHT:
moving_right = True
if event.key == K_LEFT:
moving_left = True
if event.key == K_UP:
moving_up = True
if event.key == K_DOWN:
moving_down = True
if event.type == KEYUP:
if event.key == K_RIGHT:
player_pos[0] += 24
moving_right = False
if event.key == K_LEFT:
player_pos[0] -= 24
moving_left = False
if event.key == K_UP:
player_pos[1] -= 24
moving_up = False
if event.key == K_DOWN:
player_pos[1] += 24
moving_down = False
if player_pos[1] > 290:
moving_down = False #This will be changed later so you die
if player_pos[1] < 4:
moving_up = False
if player_pos[0] < 4:
moving_left = False
if player_pos[0] > 212:
moving_right = False
a = screen.get_width()/32
b = screen.get_height()/24
print(a,b)
for i in range(len(level1)):
for j in range(len(level1[i])):
blue = list(level1[i][j])[0]
green = list(level1[i][j])[1]
red = list(level1[i][j])[2]
if blue == 255 and green == 255 and red == 255:
pygame.draw.rect(screen,(255,255),pygame.Rect(100,100,32,32))
else:
pygame.draw.rect(screen,(0,0),32))
pygame.display.update()
clock.tick(120)
print(clock.get_fps())
pygame.quit()
没有 pygame.math.Vector2
属性,我认为您指的是它具有的 flood_x
和 x
属性:
y
,
Food 有属性 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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。