微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决有没有办法在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 用于向量运算。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。