前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Pygame入门

Pygame入门

作者头像
一只大鸽子
发布2022-12-06 14:23:33
1.4K0
发布2022-12-06 14:23:33
举报

视频链接:www.youtube.com/watch?v=AY9MnQ4x3zk B站搬运地址:www.bilibili.com/video/BV1Vh411q7z1 代码及素材:github.com/clear-code-projects/UltimatePygameIntro

intro

开始学Pygame前,需要知道函数和类的基础概念。

Pygame官网www.pygame.org 提供了相关文档。

游戏是如何运行的

游戏和电影很像,所以先说一下电影是如何工作的。

电影原理:每秒播放24帧(frame)图片,你的眼睛就会将其视为动态图。电影利用这种视觉效果,通过快速播放图片实现动态的效果。

游戏和电影原理类似,你可以通过每秒播放很多帧的图片实现动态效果。与电影不同的是,需要接收玩家输入改变游戏画面。

游戏的运行过程可以概括如下:

1.检查玩家输入(事件循环,event loop)

2.根据信息绘制屏幕上的元素

3.重复1、2步骤

Pygame 的作用

Pygame 能为你做什么?

  1. 绘制图像(以及播放声音)
  2. 检查玩家输入(内置函数input()会阻塞进程,对游戏来说是无用的)
  3. 提供有用的工具,如碰撞检测(collisions),文本、计时器。

Pygame提供了简单的游戏开发工具,但是没有复杂的功能,如果你想要开发3A大作,像GTA、战地等游戏,应该去学习更复杂的引擎(虚幻,Unity等)。

开始用Pygame

安装Pygame

Pygame不是内置模块,需要安装:

pip install pygame

然后新建文件,输入

代码语言:javascript
复制
import pygame

运行后,出现版本信息,则安装成功。

代码语言:javascript
复制
pygame 2.1.2 (SDL 2.0.18, Python 3.8.13)
Hello from the pygame community. https://www.pygame.org/contribute.html

空窗口

从一个空白窗口开始学习Pygame的基本逻辑。

我们需要初始化pygame,设置窗口。

然后在一个循环中,不断检查输入,更新显示。

代码语言:javascript
复制
导入相关包

初始化pygame
设置窗口

while True:
    事件循环
    做一些处理
    更新显示

用Python实现:

代码语言:javascript
复制
import pygame
from sys import  exit

# 初始化 引擎
pygame.init()
# 设置屏幕  宽度800,高度400
screen = pygame.display.set_mode((800,400))
# 设置标题
pygame.display.set_caption('Runner')

while True:
    # 事件循环
    for event in pygame.event.get():
        # 如果点击退出,则关闭程序
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()
    # 绘图,更新
    pygame.display.update()

运行会得到一个空的黑色窗口。

帧数问题:

我们希望游戏帧数在一个正常值(60帧/秒,即60 fps),这样游戏播放速度不会太快或太慢。

在代码中,通过时钟来实现

代码语言:javascript
复制
...
clock = pygame.time.Clock()

while True:
    ...
    pygame.display.update()
    clock.tick(60) # 不超过60 fps

通过表面显示图像 display image by surface

有两种表面:显示表面(display surface)和常规表面(surface)。

显示表面是游戏窗口,所有东西都通过它显示。只有一个。 常规表面可能是一个图像,需要在显示表面上才会显示。可以有很多个。

就像是我们有一块黑板(display surface),可以在黑板上贴很多图片(surface)。

坐标系

注意,Pygame中的坐标系和高中的坐标系有些不同 Pygame中的原点在左上角。

纯色表面

现在,让我们在窗口中添加一个surface,显示红色方块。

代码语言:javascript
复制
import pygame
from sys import  exit

# 初始化 引擎
pygame.init()
# 设置屏幕  宽度800,高度400
screen = pygame.display.set_mode((800,400))
# 设置标题
pygame.display.set_caption('Runner')
# 时钟
clock = pygame.time.Clock()
# surface
test_surface = pygame.Surface((100,200))
test_surface.fill('Red')

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()
    # 绘图,更新
    screen.blit(test_surface,(0,0))  # 将test_surface放到screen上。(0,0):放置后test_surface的左上角位于screen的(0,0)处
    pygame.display.update()
    clock.tick(60) # 不超过60 fps

图片表面

当然,实际我们通常需要显示真正的图像:只需要用pygame.image.load 加载我们需要显示的图片即可

代码语言:javascript
复制
test_surface = pygame.image.load('graphics/Sky.png')

文字表面

创建文字表面的三个步骤:1.创建字体(font) 2.在表面上写文字 3.将表面放到显示表面上

代码语言:javascript
复制
test_font = pygame.font.Font('font/Pixeltype.ttf',50)
text_surface = test_font.render("My game",False,'Black')

...
screen.blit(text_surface,(300,50))

最后,实现的效果如下:

完整代码:

代码语言:javascript
复制
import pygame
from sys import  exit

# 初始化 引擎
pygame.init()
# 设置屏幕
screen = pygame.display.set_mode((800,400)) # 宽度800,高度400
pygame.display.set_caption('Runner') # 设置标题
# 时钟
clock = pygame.time.Clock()
# surface
sky_surface = pygame.image.load('graphics/Sky.png')
ground_surface  = pygame.image.load('graphics/ground.png')
test_font = pygame.font.Font('font/Pixeltype.ttf',50)
text_surface = test_font.render("My game",False,'Black')


while True:
    # 获取用户输入
    for event in pygame.event.get():
        # 用户点击退出,关闭游戏
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()
    # 绘图,更新
    screen.blit(sky_surface, (0, 0))  # 将test_surface放到screen上。(0,0):放置后test_surface的左上角位于screen的(0,0)处
    screen.blit(ground_surface,(0,300))
    screen.blit(text_surface,(300,50))
    pygame.display.update()
    clock.tick(60) # 不超过60 fps

小结:

用到的函数:

功能

函数

初始化pygame

pygame.init()

设置窗口

screen = pygame.display.set_mode((800,400))

设置标题

pygame.display.set_caption('Runner')

更新显示

pygame.display.update()

设置时钟

clock = pygame.time.Clock()

设置频率

clock.tick(60) # 不超过60 fps

加载图片

sky_surface = pygame.image.load('graphics/Sky.png')

放置表面

screen.blit(sky_surface, (0, 0))

设置字体

test_font = pygame.font.Font('font/Pixeltype.ttf',50)

用字体生成表面

text_surface = test_font.render("My game",False,'Black')

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-08-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一只大鸽子 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • intro
  • 游戏是如何运行的
  • Pygame 的作用
  • 开始用Pygame
    • 空窗口
      • 帧数问题:
      • 通过表面显示图像 display image by surface
        • 坐标系
          • 纯色表面
            • 图片表面
              • 文字表面
              • 小结:
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档