鱼C论坛

 找回密码
 立即注册
查看: 6993|回复: 45

[已解决]Pygame

[复制链接]
发表于 2023-5-13 14:39:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. >>> from pygame import *
  2. pygame 2.3.0 (SDL 2.24.2, Python 3.9.9)
  3. Hello from the pygame community. (提示不能发表链接,本来这里是pygame的官方文档链接)
  4. >>> screen = display.set_mode((640, 480))
  5. >>> font = pygame.font.SysFont('arial', 10)
  6. Traceback (most recent call last):
  7.   File "<pyshell#2>", line 1, in <module>
  8.     font = pygame.font.SysFont('arial', 10)
  9. NameError: name 'pygame' is not defined
  10. >>> font = font.SysFont('arial', 10)
  11. Traceback (most recent call last):
  12.   File "<pyshell#3>", line 1, in <module>
  13.     font = font.SysFont('arial', 10)
  14.   File "D:\Python\lib\site-packages\pygame\sysfont.py", line 459, in SysFont
  15.     return constructor(fontname, size, set_bold, set_italic)
  16.   File "D:\Python\lib\site-packages\pygame\sysfont.py", line 377, in font_constructor
  17.     font = Font(fontpath, size)
  18. pygame.error: font not initialized
复制代码
最佳答案
2023-5-13 15:08:47

  1. import pygame

  2. pygame.init()

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

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

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

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

  17. # 退出pygame
  18. pygame.quit()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-5-13 14:39:29 | 显示全部楼层
缺少了pygame.init()
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-13 14:39:32 | 显示全部楼层
这段代码中出现了两个错误。第一个错误是在导入pygame时出现了问题,因此无法使用pygame模块中的函数和方法。您需要确保已正确安装pygame并正确导入它。第二个错误是“pygame.error: font not initialized”,这是因为在使用pygame的字体之前需要初始化pygame的字体模块。

以下是正确的代码:
  1. import pygame
  2. pygame.init() # 初始化pygame
  3. screen = pygame.display.set_mode((640, 480))
  4. font = pygame.font.SysFont('arial', 10)
复制代码

在这个例子中,我们首先导入了pygame模块并使用 pygame.init() 初始化了pygame。然后我们创建了一个640x480的窗口,最后创建了一个arial字体大小为10的字体对象。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

耶!比你快3秒
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-13 14:41:50 | 显示全部楼层

您好,请问为什么?
  1. >>> from pygame import *
  2. pygame 2.3.0 (SDL 2.24.2, Python 3.9.9)
  3. Hello from the pygame community. xxxxxxxxxxxxxxxx
  4. >>> pygame.init()
  5. Traceback (most recent call last):
  6.   File "<pyshell#1>", line 1, in <module>
  7.     pygame.init()
  8. NameError: name 'pygame' is not defined
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-13 14:43:29 | 显示全部楼层
21kwimpizswmp 发表于 2023-5-13 14:41
您好,请问为什么?

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

这只是一个惯例,代表大家都喜欢这么写,也不是强制
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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()为什么不报错?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

有些东西是一定得init才能用的,有些不是
网上的代码没init是他的代码不规范
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-13 14:46:59 | 显示全部楼层
你好!感谢你的提问。

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


  1. import pygame

  2. # 初始化 Pygame 库
  3. pygame.init()

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

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

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

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

  12. # 等待用户关闭窗口
  13. while True:
  14.     for event in pygame.event.get():
  15.         if event.type == pygame.QUIT:
  16.             pygame.quit()
  17.             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()` 来退出
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

抱歉刚才没看见您的回答。请问有没有一个完整的pygame例子,就是将屏幕窗口变成白色(刚才我的代码运行起来是黑色),然后监听关闭窗口事件(网上代码都是sys.exit(),,,,请问有没有其他的写法?pygame官网的写法呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-13 14:49:01 | 显示全部楼层
sfqxx 发表于 2023-5-13 14:46
你好!感谢你的提问。

以下是一个示例的完整Pygame程序,它打开一个窗口并展示一张图片:
  1. Python 3.9.9 (tags/v3.9.9:ccb0e6a, Nov 15 2021, 18:08:50) [MSC v.1929 64 bit (AMD64)]
  2. Type 'copyright', 'credits' or 'license' for more information
  3. IPython 8.12.0 -- An enhanced Interactive Python. Type '?' for help.

  4. In [1]:
  5.    ...: import pygame
  6.    ...:
  7.    ...: # 初始化 Pygame 库
  8.    ...: pygame.init()
  9.    ...:
  10.    ...: # 创建一个窗口大小为480x320像素的屏幕
  11.    ...: screen = pygame.display.set_mode((480, 320))
  12.    ...:
  13.    ...: # 载入图片
  14.    ...: image = pygame.image.load("image.png")
  15.    ...:
  16.    ...: # 将图片绘制到屏幕上
  17.    ...: screen.blit(image, (0, 0))
  18.    ...:
  19.    ...: # 刷新屏幕,更新显示内容
  20.    ...: pygame.display.update()
  21.    ...:
  22.    ...: # 等待用户关闭窗口
  23.    ...: while True:
  24.    ...:     for event in pygame.event.get():
  25.    ...:         if event.type == pygame.QUIT:
  26.    ...:             pygame.quit()
  27.    ...:             break
  28.    ...:
  29. pygame 2.3.0 (SDL 2.24.2, Python 3.9.9)
  30. Hello from the pygame community. sssssssssssssssssssss
  31. ---------------------------------------------------------------------------
  32. FileNotFoundError                         Traceback (most recent call last)
  33. Cell In[1], line 10
  34.       7 screen = pygame.display.set_mode((480, 320))
  35.       9 # 载入图片
  36. ---> 10 image = pygame.image.load("image.png")
  37.      12 # 将图片绘制到屏幕上
  38.      13 screen.blit(image, (0, 0))

  39. FileNotFoundError: No file 'image.png' found in working directory 'C:\Users\bruce'.
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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


  1. import pygame

  2. pygame.init()

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

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

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

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

  17. # 退出pygame
  18. pygame.quit()
复制代码


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

值得一提的是,当调用 `pygame.quit()` 时,pygame会释放占用的系统资源。必须在结束游戏前,调用这个函数释放相关资源。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-13 14:50:03 | 显示全部楼层
sfqxx 发表于 2023-5-13 14:46
你好!感谢你的提问。

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

看代码信息是没有image.png,加上后,窗口可以关闭,但是循环似乎无法退出
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

《我慢了一步的后果》
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-13 14:50:37 | 显示全部楼层


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

File->New File

至于图片报错,是因为您的电脑没有该图片
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-13 14:51:54 | 显示全部楼层
sfqxx 发表于 2023-5-13 14:50
不要用交互模式运行这段代码,要用脚本式

File->New File

我用的脚本式也一样
翻了翻求助平台,发现很多人都是多行一起在idle shell里的
我在ipython(pip install)里很正常
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

看看这段代码

  1. import pygame

  2. pygame.init()

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

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

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

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

  17. # 退出pygame
  18. pygame.quit()
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

截个图?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-13 14:53:03 | 显示全部楼层

截好了,哪里发图片?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-13 14:53:29 | 显示全部楼层
sfqxx 发表于 2023-5-13 14:50
不要用交互模式运行这段代码,要用脚本式

File->New File

那你哪来的image.png

点评

这个图片是个例子  发表于 2023-5-13 14:54
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-8 03:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表