0

代码:

import pygame, sys

x = 640
y = 480
screen = pygame.display.set_mode([x,y], pygame.RESIZABLE | pygame.OPENGL)

while True:
    x, y = pygame.Surface.get_size()
    for event in pygame.event.get():
        if event.type == pygame.QUIT or event.type == pygame.K_ESCAPE:
            pygame.quit()
            sys.exit()

错误

Traceback (most recent call last):
  File "C:/Users/Mendel/My programs/game Project/test.py", line 8, in <module>
    x, y = pygame.Surface.get_size()
TypeError: descriptor 'get_size' of 'pygame.Surface' object needs an argument

当我查找文档时,它说我应该没有错误

4

3 回答 3

2

您需要改用screen对象:

x, y = screen.get_size()

根据文档,它返回一个 Surface 对象

pygame.display.set_mode()
Initialize a window or screen for display
set_mode(resolution=(0,0), flags=0, depth=0) -> Surface
于 2013-04-19T18:47:51.053 回答
1

您不能在类上调用常规实例方法,而必须在该类的实例上调用它。*

那么,如何获得一个类的实例呢?好吧,一般来说,你要么通过做类似的事情来构造一个实例my_instance = MyClass(my_params),要么你调用一些帮助函数来为你做这件事。

对于与pygame……相关的细节,您确实需要完成pygame教程。表面可以是任何东西,从屏幕或窗口的主“绘图画布”到加载的图像。目前尚不清楚您要在这里使用什么表面,所以我无法告诉您如何获得。

您可能想从pygame 新手指南开始,然后继续阅读官方教程


* 这并不完全正确。您可以在类而不是实例上调用方法,但是您必须将实例作为第一个 ( self) 参数显式传递,而且您很少想要这样做。无论如何,这就是为什么你会收到一条有点误导性的错误消息,说它“需要一个参数”。

于 2013-04-19T18:55:35.960 回答
-1

您的语法错误;您在 Surface 上调用 get_size,而不是变量。您的代码应如下所示:

variable = pygame.Surface(variable.get_size())

所以你会在你的屏幕变量上调用它。我格式化这个的方式是如果你的变量是一个 pygame 变量而不是 Surface(就像你的屏幕变量)。要查看根据变量的不同格式化代码的方式,请查看pygame 的示例

于 2013-04-19T18:53:52.780 回答