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

intro

开始学Pygame前,需要知道函数和类的基础概念。
你可以去Pygame官网www.pygame.org 查看相关文档。

游戏是如何运行的 How games work

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

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

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

游戏的运行过程可以概括如下:
1.检查玩家输入(事件循环,event loop)
2.根据信息绘制屏幕上的元素
3.重复1、2步骤

What Pygame does

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

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

开始用Pygame Creating a blank window (+ clock)

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

然后新建文件,输入

import pygame

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

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
设置窗口while True:事件循环做一些处理更新显示

用Python实现:

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),这样游戏播放速度不会太快或太慢。

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

...
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,显示红色方块。

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 加载我们需要显示的图片即可

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

文字表面

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

test_font = pygame.font.Font('font/Pixeltype.ttf',50)
text_surface = test_font.render("My game",False,'Black')...
screen.blit(text_surface,(300,50))

最后,实现的效果如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tr43MpdL-1660814354825)(assets/my_game.png)]
完整代码:

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’)

Pygame入门 2022 (1)相关推荐

  1. Pygame入门 2022 (4) 使用精灵类重构

    前面3章已经完成了游戏,这章使用OOP风格重构游戏,然后给游戏添加一点音乐. 用精灵类重构 如果你完成了前3章的代码,应该会发现代码很乱.想更改某个代码?查找困难.修改起来更困难!不断添加的新功能让我 ...

  2. python飞机大战跟随鼠标移动_用Python写飞机大战游戏之pygame入门(4):获取鼠标的位置及运动...

    # -*- coding: utf8 -*- background_image_filename = 'background.png' mouse_image_filename = 'hero.png ...

  3. python编程从入门到实践 第18章Django入门 2022年最新

    说明:这篇文章只是记录自己自学本书的一个痕迹,日后来看作为一个念想.至于做为公开,是希望对一些同样跟我一样的朋友有一点点帮助,当然我本人就是小白,帮助可能也不大哈哈. 这篇文章记录了<pytho ...

  4. pygame入门小游戏(外星人入侵(2)设置背景颜色和添加背景图)

    上一节介绍了游戏窗口的创建,今天我们来给游戏添加一个有颜色的背景吧!也可以添加一张你喜欢的图片作为背景^_^ 我们创建一种背景色,并把它存储在bg_color中.颜色只需指定一次,因此在while循环 ...

  5. 【Python】Pygame入门

    Pygame的历史 Pygame是一个利用SDL库的写的游戏库,SDL呢,全名Simple DirectMedia Layer,是一位叫做Sam Lantinga的大牛写的,据说他为了让Loki(致力 ...

  6. 大爽pygame入门教程 第一节 基础知识

    作者自我介绍:大爽歌, b站小UP主 ,编程1对1辅导老师 本节掌握要点: 文本, 图形, 键鼠事件,动态展示. 一.实现基础窗口 0 - 新建文件 新建001.py文件,内容如下 import py ...

  7. pygame入门小游戏(外星人入侵(6) 外星飞船来啦!【二】)

    看了课本和几个实例,发现还是使用精灵中的groupcollide()来检测碰撞比较简单,所以我们接着第五节,把外星飞船也使用精灵来绘制,(上节因为并没有使用Sprite,感觉实现击落飞船有点困难,所以 ...

  8. Pygame入门-游戏代码结构及背景轮播、声音音效及图像动态效果

    一.游戏代码结构 代码结构是代码的组织方式,也是游戏编程的思考框架.pygame官方文档中给出了以下建议,将游戏代码结构分为以下六个部分. 1导入游戏模块. 2资源处理类;定义一些类来处理最基本的资源 ...

  9. pygame入门小游戏(外星人入侵(2):为窗口设计背景颜色以及背景图片)

    Pygame默认创建一个黑色屏幕,这太乏味了.下面来将背景设置为另一种颜色,这是在方法run_game(self)前和末尾进行的! 设计背景颜色: def run_game(self):bg_colo ...

最新文章

  1. python判断数据类型
  2. mysql 源码安装 5.6.21_Mysql5.6.21源码安装
  3. AtomicInteger
  4. 【数学建模】MATLAB应用实战系列(九十三)-岭回归应用案例(附MATLAB和Python代码)
  5. 在Redhat中添加微软雅黑字体
  6. pytorch基础知识整理(一)自动求导机制
  7. SAP Spartacus 的页面布局
  8. hadoop2.4.2集群搭建及hive与mysql集成文档记录
  9. 【Java】计算当n=9时n!的值,并分别输出1!到9!各阶乘的值
  10. 小白学 Python 爬虫:自动化测试框架 Selenium 从入门到实战
  11. java 平均分配算法_java 分配算法
  12. 报告称相比南方 数字化平台对北方小微商家助力作用更大
  13. C++笔记-1-c与c++基础区别
  14. 千万级中文公开免费聊天语料数据分享
  15. SQL AlawaysOn 之四:故障转移集群
  16. Golang的Redis简单使用及集群配置(Win10)
  17. Unity---Shader
  18. JDK 11 首超 JDK 8,真牛逼了!
  19. CSS中的z-index属性的使用
  20. 解酒方法最全妙招 很灵的!

热门文章

  1. AUTOCAD——等距标注
  2. 锐达又出新型设备:【钢结构抛丸机】
  3. react-native云服务直播方案
  4. 三星s9 android beta,三星S9/Note9 One UI 2.0 beta马上到:基于Android 10
  5. 抗原试剂进口报关及清关手续跟操作流程「报关指南」
  6. 2021年中国冰壶运动器材及配件市场趋势报告、技术动态创新及2027年市场预测
  7. cbac式_abca式的成语大全
  8. 问题 B: 首字母大写
  9. ExecutorService - 10个技巧和窍门
  10. java thumbnails 内存_Java修改图片尺寸,总是报内存溢出怎么解决?