问题描述
我尝试在我的游戏中制作一个简单的系统,让玩家在鼠标所在的位置射击。 但是当我得到鼠标位置时,我得到一个浮动元组(我认为这就是它的名字)
有没有办法让鼠标位置变圆。
这是代码(我对其进行了更改,因此会打印鼠标位置而不是我的整个游戏,但您已经了解了它的全部内容)
import pygame as pg
class Game:
def __init__(self):
pg.init()
pg.display.init()
self.screen = pg.display.set_mode((500,500))
self.clock = pg.time.Clock()
def update(self):
print(pg.mouse.get_pos())
def run(self):
self.playing = True
while self.playing:
self.dt = self.clock.tick(FPS) / 1000
self.update()
def quit(self):
pg.quit()
g = Game()
while True
g.update()
这是错误
self.pos += self.vel * self.game.dt ## This is a line of code that makes the movement smooth ##
TypeError: can't multiply sequence by non-int of type 'float'
但是如您所见,print(pg.mouse.get_pos())
的输出不是浮点数。知道发生了什么吗?
解决方法
鼠标位置是一个整数值,但 self.game.dt
不是整数。
如果 self.vel
是列表或元组,则 self.vel * self.game.dt
不会执行您期望的操作。它不会将列表的每个元素相乘,而是将列表翻倍。
您必须单独更改坐标的组件:
self.pos += self.vel * self.game.dt
self.pos = (
self.pos[0] + self.vel[0]*self.game.dt,self.pos[1] + self.vel[1]*self.game.dt)
如果 self.pos
不是元组而是列表,则可以将其缩短:
self.pos[0] += self.vel[0]*self.game.dt
self.pos[1] += self.vel[1]*self.game.dt
Pygame 提供 pygame.math.Vector2
用于向量运算。