21kwimpizswmp 发表于 2023-5-13 14:39:06

Pygame

>>> from pygame import *
pygame 2.3.0 (SDL 2.24.2, Python 3.9.9)
Hello from the pygame community. (提示不能发表链接,本来这里是pygame的官方文档链接)
>>> screen = display.set_mode((640, 480))
>>> font = pygame.font.SysFont('arial', 10)
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
    font = pygame.font.SysFont('arial', 10)
NameError: name 'pygame' is not defined
>>> font = font.SysFont('arial', 10)
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
    font = font.SysFont('arial', 10)
File "D:\Python\lib\site-packages\pygame\sysfont.py", line 459, in SysFont
    return constructor(fontname, size, set_bold, set_italic)
File "D:\Python\lib\site-packages\pygame\sysfont.py", line 377, in font_constructor
    font = Font(fontpath, size)
pygame.error: font not initialized

歌者文明清理员 发表于 2023-5-13 14:39:29

缺少了pygame.init()

isdkz 发表于 2023-5-13 14:39:32

这段代码中出现了两个错误。第一个错误是在导入pygame时出现了问题,因此无法使用pygame模块中的函数和方法。您需要确保已正确安装pygame并正确导入它。第二个错误是“pygame.error: font not initialized”,这是因为在使用pygame的字体之前需要初始化pygame的字体模块。

以下是正确的代码:

import pygame

pygame.init() # 初始化pygame
screen = pygame.display.set_mode((640, 480))
font = pygame.font.SysFont('arial', 10)


在这个例子中,我们首先导入了pygame模块并使用 pygame.init() 初始化了pygame。然后我们创建了一个640x480的窗口,最后创建了一个arial字体大小为10的字体对象。

歌者文明清理员 发表于 2023-5-13 14:40:03

isdkz 发表于 2023-5-13 14:39
这段代码中出现了两个错误。第一个错误是在导入pygame时出现了问题,因此无法使用pygame模块中的函数和方法 ...

耶!比你快3秒

21kwimpizswmp 发表于 2023-5-13 14:41:50

歌者文明清理员 发表于 2023-5-13 14:39
缺少了pygame.init()

您好,请问为什么?
>>> from pygame import *
pygame 2.3.0 (SDL 2.24.2, Python 3.9.9)
Hello from the pygame community. xxxxxxxxxxxxxxxx
>>> pygame.init()
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
    pygame.init()
NameError: name 'pygame' is not defined

歌者文明清理员 发表于 2023-5-13 14:43:29

21kwimpizswmp 发表于 2023-5-13 14:41
您好,请问为什么?

你是from pygame import *的话就应该init(),一般情况下pygame用的都是import pygame,因为事件循环里的event与pygame.event名字重复

这只是一个惯例,代表大家都喜欢这么写,也不是强制

21kwimpizswmp 发表于 2023-5-13 14:44:58

歌者文明清理员 发表于 2023-5-13 14:43
你是from pygame import *的话就应该init(),一般情况下pygame用的都是import pygame,因为事件循环里的e ...

谢谢!那请问一个完整的pygame程序怎么写?
看到网上有一些代码没用pyagme.init()
还有就是screen=display.set_mode()为什么不报错?

歌者文明清理员 发表于 2023-5-13 14:45:49

21kwimpizswmp 发表于 2023-5-13 14:44
谢谢!那请问一个完整的pygame程序怎么写?
看到网上有一些代码没用pyagme.init()
还有就是screen=disp ...

有些东西是一定得init才能用的,有些不是
网上的代码没init是他的代码不规范

sfqxx 发表于 2023-5-13 14:46:59

你好!感谢你的提问。

以下是一个示例的完整Pygame程序,它打开一个窗口并展示一张图片:


import pygame

# 初始化 Pygame 库
pygame.init()

# 创建一个窗口大小为480x320像素的屏幕
screen = pygame.display.set_mode((480, 320))

# 载入图片
image = pygame.image.load("image.png")

# 将图片绘制到屏幕上
screen.blit(image, (0, 0))

# 刷新屏幕,更新显示内容
pygame.display.update()

# 等待用户关闭窗口
while True:
    for event in pygame.event.get():
      if event.type == pygame.QUIT:
            pygame.quit()
            break
在这个程序中,我们首先使用 `pygame.init()` 函数初始化 Pygame 库。然后,我们创建了一个屏幕对象,这个屏幕对象可以理解为一个窗口,我们使用 `pygame.display.set_mode()` 函数来创建这个窗口,并指定了窗口大小(在本例中是480x320像素)。接下来,我们载入一张名字为"image.png"的图片,使用 `pygame.image.load()` 函数。最后,我们将这个图片绘制到屏幕上,调用`screen.blit()`函数,接受两个参数,第一个是要绘制的表面(即我们加载的图像),第二个是目标位置的坐标。我们使用`(0, 0)`表示这个图片放在窗口的左上角,接着,我们使用 `pygame.display.update()` 函数刷新屏幕来更新显示内容。最后,我们使用一个while循环等待用户关闭窗口 ,如果发现了以 `QUIT` 为type的事件,就调用 `pygame.quit()` 来退出

21kwimpizswmp 发表于 2023-5-13 14:47:48

isdkz 发表于 2023-5-13 14:39
这段代码中出现了两个错误。第一个错误是在导入pygame时出现了问题,因此无法使用pygame模块中的函数和方法 ...

抱歉刚才没看见您的回答。请问有没有一个完整的pygame例子,就是将屏幕窗口变成白色(刚才我的代码运行起来是黑色),然后监听关闭窗口事件(网上代码都是sys.exit(),,,,请问有没有其他的写法?pygame官网的写法呢

21kwimpizswmp 发表于 2023-5-13 14:49:01

sfqxx 发表于 2023-5-13 14:46
你好!感谢你的提问。

以下是一个示例的完整Pygame程序,它打开一个窗口并展示一张图片:


Python 3.9.9 (tags/v3.9.9:ccb0e6a, Nov 15 2021, 18:08:50)
Type 'copyright', 'credits' or 'license' for more information
IPython 8.12.0 -- An enhanced Interactive Python. Type '?' for help.

In :
   ...: import pygame
   ...:
   ...: # 初始化 Pygame 库
   ...: pygame.init()
   ...:
   ...: # 创建一个窗口大小为480x320像素的屏幕
   ...: screen = pygame.display.set_mode((480, 320))
   ...:
   ...: # 载入图片
   ...: image = pygame.image.load("image.png")
   ...:
   ...: # 将图片绘制到屏幕上
   ...: screen.blit(image, (0, 0))
   ...:
   ...: # 刷新屏幕,更新显示内容
   ...: pygame.display.update()
   ...:
   ...: # 等待用户关闭窗口
   ...: while True:
   ...:   for event in pygame.event.get():
   ...:         if event.type == pygame.QUIT:
   ...:             pygame.quit()
   ...:             break
   ...:
pygame 2.3.0 (SDL 2.24.2, Python 3.9.9)
Hello from the pygame community. sssssssssssssssssssss
---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
Cell In, line 10
      7 screen = pygame.display.set_mode((480, 320))
      9 # 载入图片
---> 10 image = pygame.image.load("image.png")
   12 # 将图片绘制到屏幕上
   13 screen.blit(image, (0, 0))

FileNotFoundError: No file 'image.png' found in working directory 'C:\Users\bruce'.

sfqxx 发表于 2023-5-13 14:49:14

21kwimpizswmp 发表于 2023-5-13 14:47
抱歉刚才没看见您的回答。请问有没有一个完整的pygame例子,就是将屏幕窗口变成白色(刚才我的代码运行起 ...

以下是一个完整的pyame例子,将屏幕窗口变成白色,并监听关闭窗口事件。代码中使用 `pygame.display.set_caption()` 方法来命名窗口标题,使用 `pygame.display.flip()` 来更新显示的内容。


import pygame

pygame.init()

# 创建屏幕窗口并设置标题
screen = pygame.display.set_mode((500, 500))
pygame.display.set_caption("白色窗口")

# 将屏幕填充为白色
screen.fill((255, 255, 255))

# 更新窗口显示的内容
pygame.display.flip()

# 循环监听事件
running = True
while running:
    for event in pygame.event.get():
      if event.type == pygame.QUIT:
            # 监听到窗口关闭事件后退出循环
            running = False

# 退出pygame
pygame.quit()

在监听关闭窗口事件时,可以使用 `pygame.QUIT` 事件类型。当用户尝试关闭窗口时,系统会创建这个事件。因此,只要监听到这个事件就可以退出游戏、释放资源。

值得一提的是,当调用 `pygame.quit()` 时,pygame会释放占用的系统资源。必须在结束游戏前,调用这个函数释放相关资源。

21kwimpizswmp 发表于 2023-5-13 14:50:03

sfqxx 发表于 2023-5-13 14:46
你好!感谢你的提问。

以下是一个示例的完整Pygame程序,它打开一个窗口并展示一张图片:


看代码信息是没有image.png,加上后,窗口可以关闭,但是循环似乎无法退出

歌者文明清理员 发表于 2023-5-13 14:50:28

sfqxx 发表于 2023-5-13 14:49
以下是一个完整的pyame例子,将屏幕窗口变成白色,并监听关闭窗口事件。代码中使用 `pygame.display.set_ ...

《我慢了一步的后果》

sfqxx 发表于 2023-5-13 14:50:37

21kwimpizswmp 发表于 2023-5-13 14:49


不要用交互模式运行这段代码,要用脚本式

File->New File

至于图片报错,是因为您的电脑没有该图片

21kwimpizswmp 发表于 2023-5-13 14:51:54

sfqxx 发表于 2023-5-13 14:50
不要用交互模式运行这段代码,要用脚本式

File->New File

我用的脚本式也一样
翻了翻求助平台,发现很多人都是多行一起在idle shell里的
我在ipython(pip install)里很正常

sfqxx 发表于 2023-5-13 14:51:56

21kwimpizswmp 发表于 2023-5-13 14:50
看代码信息是没有image.png,加上后,窗口可以关闭,但是循环似乎无法退出

看看这段代码

import pygame

pygame.init()

# 创建屏幕窗口并设置标题
screen = pygame.display.set_mode((500, 500))
pygame.display.set_caption("白色窗口")

# 将屏幕填充为白色
screen.fill((255, 255, 255))

# 更新窗口显示的内容
pygame.display.flip()

# 循环监听事件
running = True
while running:
    for event in pygame.event.get():
      if event.type == pygame.QUIT:
            # 监听到窗口关闭事件后退出循环
            running = False

# 退出pygame
pygame.quit()

sfqxx 发表于 2023-5-13 14:52:29

21kwimpizswmp 发表于 2023-5-13 14:51
我用的脚本式也一样
翻了翻求助平台,发现很多人都是多行一起在idle shell里的
我在ipython(pip insta ...

截个图?

21kwimpizswmp 发表于 2023-5-13 14:53:03

sfqxx 发表于 2023-5-13 14:52
截个图?

截好了,哪里发图片?

21kwimpizswmp 发表于 2023-5-13 14:53:29

sfqxx 发表于 2023-5-13 14:50
不要用交互模式运行这段代码,要用脚本式

File->New File


那你哪来的image.png
页: [1] 2 3
查看完整版本: Pygame