如何修复Pygame报错:TypeError: 不支持'int'与'pygame.math.Vector2'的+=操作
问题修复说明
报错根因
你遇到的报错是类型不匹配导致的:
TypeError: unsupported operand type(s) for +=: 'int' and 'pygame.math.Vector2'
触发在y += velocity行:y是int类型的单个数值,velocity是pygame的二维向量类型,自带x、y两个方向的分量,无法直接把整个向量加到单个整数变量上。
其他隐藏问题
你的代码里还有三处同类型的逻辑错误:
velocity += acceleration:acceleration是0.1的浮点数,不能直接和二维向量相加if keys[pygame.K_a]: velocity = -3:不能把int类型的-3直接赋值给二维向量变量- 开头冗余定义了int类型的
velocity = 0,后续被向量类型的velocity覆盖,属于无效代码
修复后的可运行代码
import pygame, sys from pygame.math import Vector2 from pygame.locals import * def main(): x = 100 y = 100 # 将加速度定义为二维向量,这里设为Y方向的重力加速度 acceleration = Vector2(0, 0.1) # Initialize the pygame pygame.init() # Create the screen DISPLAY = pygame.display.set_mode((500, 400), 0, 32) # Title and Icon pygame.display.set_caption('Dragon') # 若无对应素材可暂时注释以下两行避免额外报错 # icon = pygame.image.load('dragon.png') # pygame.display.set_icon(icon) velocity = Vector2(3, 0) WHITE=(255, 255, 255) BLUE=(0, 0, 255) DISPLAY.fill(WHITE) while True: keys = pygame.key.get_pressed() for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() DISPLAY.fill((255, 255, 255)) pygame.draw.rect(DISPLAY, BLUE, (x, y, 50, 50)) # 分别用速度的x、y分量更新对应坐标 x += velocity.x if x + 50 > DISPLAY.get_width(): velocity.x = -3 if x < 0: velocity.x = 3 y += velocity.y # 加速度作用到速度向量上 velocity += acceleration if keys[pygame.K_a]: # 仅修改x方向的速度实现左移 velocity.x = -3 pygame.display.update() pygame.time.delay(10) main()
内容的提问来源于stack exchange,提问作者darkempress
相关产品推荐
相关产品推荐

