有没有办法在pygame中绕过鼠标位置?

问题描述

我尝试在我的游戏中制作一个简单的系统,让玩家在鼠标所在的位置射击。 但是当我得到鼠标位置时,我得到一个浮动元组(我认为这就是它的名字)

有没有办法让鼠标位置变圆。

这是代码(我对其进行了更改,因此会打印鼠标位置而不是我的整个游戏,但您已经了解了它的全部内容

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 用于向量运算。