写点什么

pygame 核心但简单的知识点,坐标系、Surface 对象、颜色与 Color 对象、Rect 对象

发布于: 刚刚

本系列专栏将通过不断编写游戏的方式,带你夯实 Python 知识。


本专栏追求迅速掌握 pygame 的同时,夯实 python 知识,所以一起来吧。

坐标系

在 pygame 中坐标系是传统的笛卡尔坐标系统,如下图所示,牢记这个坐标系,接下来学习就事半功倍了。


Surface 对象

简单理解 Surface 对象就是一个矩形的 2D 图像对象,在之前的博客中学习到的 pygame.display.set_mode() 返回的 Surface 对象 叫做显示对象(窗口对象,display surface),后续代码绘制到显示 Surface 对象上的任何内容,都在调用 pygame.display.update() 方法的时候,显示到窗口上。


游戏每循环一次,Surface 对象会将所有内容都绘制到 display surface 上,这在 pygame 中叫做一帧,一般在 pygame 中帧数设置为 30,即每秒运行 30 帧(30 FPS),每秒运行的帧数叫做帧速率(frame rate)。


使用的代码如下:


rate = pygame.time.Clock()while True:  rate.tick(30)    ticks = pygame.time.get_ticks()    # todo    groups.update(ticks)
复制代码

颜色

在 pygame 中颜色是使用 RGB 表示的,每个颜色的取值范围是 [0,255],不要超过该数字,超过会出现 Value Error:invalid color argument。一般用一个元组进行表示 (0,0,0),这个颜色不用特别记忆,用的时候查询即可。


https://bj.96weixin.com/tools/rgbhttp://tools.jb51.net/color/select_colorhttps://tool.oschina.net/commons?type=3

颜色的透明度

在 RGB 颜色元组中,添加第四个值,即 alpha值,案例为 (255, 0, 0) 表示红色,(255,0,0,100) 透明红色。


import pygamepygame.init()pygame.display.set_mode((500, 300))screen = pygame.display.get_surface()s = pygame.Surface((100, 100), pygame.SRCALPHA)# s.set_alpha(128)s.fill((255, 0, 0, 128))screen.blit(s, (0, 0))
# 游戏开始while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.display.quit() quit()
# 界面绘制 pygame.display.update()
复制代码


绘制的时候,注意透明度 Surface 对象的绘制,不要在游戏循环内部,否则会因为每次都在绘制,很快就实现完全不透明,即你的透明度失效了。


除了直接设置 alpha 通道值以外,还可以使用 s.set_alpha(128) 函数实现透明效果。

pygame.Color 对象

除了使用元组的方式进行颜色表示以外,还可以使用 Color 对象,使用的方式也非常简单,代码示例如下:


pygame.Color(255,0,0)
复制代码

pygame.Rect 对象

在 pygame 中有两种方式表示矩形对象,即 Rect 对象,一种是用 4 个整数的元组,另一种就是用 Rect 对象。


格式为 (0,0,100,100), 4 个值分别是 X 坐标,Y 坐标,矩形的宽度,矩形的高度,后两者单位是像素。


除了对象的声明外,你需要掌握对象的属性。具体如下,在后续博客中,使用频率都有非常高。


x,ytop, left, bottom, righttopleft, bottomleft, topright, bottomrightmidtop, midleft, midbottom, midrightcenter, centerx, centerysize, width, heightw,h
复制代码


对应的官方手册地址为 https://www.pygame.org/docs/ref/rect.html

发布于: 刚刚阅读数: 2
用户头像

爬虫 100 例作者,蓝桥签约作者,博客专家 2021.02.06 加入

6 年产品经理+教学经验,3 年互联网项目管理经验; 互联网资深爱好者; 沉迷各种技术无法自拔,导致年龄被困在 25 岁; CSDN 爬虫 100 例作者。 个人公众号“梦想橡皮擦”。

评论

发布
暂无评论
pygame 核心但简单的知识点,坐标系、Surface 对象、颜色与 Color 对象、Rect 对象