【问题标题】:A deprecation warning keeps popping up in pygamepygame 中不断弹出弃用警告
【发布时间】:2021-05-06 20:42:48
【问题描述】:

所以,我正在制作一款我遇到多个问题的游戏,因为这是我的第一个游戏。问题之一是,每当我打开它时,只会弹出一个-5,然后程序开始工作。我认为这是因为以下具体警告:

Warning (from warnings module):
  File "C:/Users/LENOVO/Desktop/Everything Here!!/MoreCollision.py", line 57
    win.blit(text, (250 -(text.get_width()/2), 200))
DeprecationWarning: an integer is required (got type float).  Implicit conversion to integers using __int__ is deprecated, and may be removed in a future version of Python.

而属于它的代码是:

 def hit(self):
        self.x = 60
        self.y = 410
        self.walkCount = 0
        font1 = pygame.font.SysFont('comicsans', 100)
        text = font1.render('-5', 1, (255,0,0))
        win.blit(text, (250 -(text.get_width()/2), 200))
        pygame.display.update()
        i = 0
        while i < 300:
            pygame.time.delay(10)
            i += 1
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    i = 301
                    pygame.quit()

所以,我真的不知道如何解决它。如果有人可以,请提供帮助。

【问题讨论】:

  • 您应该将该行更改为win.blit(text, (250 -int(text.get_width()/2), 200))。但是,这可能不是您的问题的原因。负5在哪里弹出?在终端,pygame 窗口,还是其他地方?
  • @Seth 负数 5 在屏幕中间弹出,整个背景变黑,但它不应该这样做。当我在游戏中的角色与敌人发生碰撞时,一切正常,直到它再次开始,角色在 pygame 窗口中真正下降。要我上传整个代码吗?
  • 你的代码是text = font1.render('-5', 1, (255,0,0)),所以当blitted时会在屏幕上显示-5。你期待什么?
  • @Seth 我应该如何解决它?对不起,我是一个初学者
  • 删除将-5写入屏幕的部分代码...

标签: python pygame warnings


【解决方案1】:

警告与blit() 的坐标参数有关。浮点坐标,意味着Surface 的原点介于窗口中的像素之间。这没有多大意义。坐标会被自动、隐式截断,并由警告指示。

使用//(地板除法)运算符

win.blit(text, (250 -(text.get_width() // 2), 200))

round 为整数值

win.blit(text, (250 - round(text.get_width()/2), 200))

【讨论】:

  • 很抱歉,它仍然没有消失。
  • @BruceBanner 对不起,你做错了。
  • @BruceBanner 您的问题是关于警告“需要一个整数(获取类型浮点数)”。这个问题是重复的。
  • 对不起,我是个初学者。
  • 我认为这是我的错,因为我的问题非常不清楚,是的,你是对的,我想显示 -5 但只有当我的角色与敌人发生碰撞时才会显示它在我的程序开始时,这不是它应该做的。对于所有这些误解,我深表歉意,我将发布一个新的明确问题...
【解决方案2】:

删除将-5 写入屏幕的代码以阻止其写入屏幕。这也解决了DeprecationWarning,因为它是由将-5 写入屏幕的代码引起的!

【讨论】:

  • 弃用警告是由win.blit(text, (250 -(text.get_width()/2), 200)) 行引起的,错误跟踪中清楚地显示了这一点。这是因为除法的结果总是一个浮点数
  • 是的,但那是将-5 写入OP 不想要的屏幕。删除该行完全解决了这两个问题。 @Rabbid76
  • 所以你想删除win.blit(text, (250 -(text.get_width()/2), 200))这一行?
  • 是的。如果您查看问题上的 cmets,您会发现这解决了 OP 的问题。 @Rabbid76
  • 不,我不这么认为。我很确定他想画一些文字。我认为删除所有代码不是解决方案。但是,这个问题完全不清楚,需要改进。
猜你喜欢
  • 2021-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-11
  • 2021-07-12
  • 2017-08-22
  • 2011-09-29
相关资源
最近更新 更多