携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第7天,点击查看活动详情
1. 游戏中的坐标系
首先,我们需要理解游戏中的坐标系:只有明确了坐标系以后,我们才能在游戏窗口的准确位置绘制图像。
- 原点在左上角(0,0)
- x轴水平方向向右,逐渐增加
- y轴垂直方向向下,逐渐增加
在游戏中,所有可见的元素都是以矩形区域来描述位置的
要描述一个矩形区域有四个要素:(x, y) (width, height)
pygame.Rect
pygame专门提供了一个类pygame.Rect用于描述矩形区域
提示:
- pygame.Rect是一个比较特殊的类,内部只是封装了一些数字计算
- 不执行pygame.init()方法同样能够直接使用
- 其中的size属性是一个元组属性,size属性返回的第一个值是矩形宽度,第二个值是矩形高度
2. 案例演练
案例需求:
- 定义hero_rect矩形描述英雄的位置和大小
- 输出英雄的坐标原点(x和y)
- 输出英雄的尺寸(宽度和高度)
案例代码演示如下所示:
import pygame
hero_rect = pygame.Rect(100, 500, 120, 125)
print("英雄的原点 %d %d" % (hero_rect.x, hero_rect.y))
print("英雄的尺寸 %d %d" % (hero_rect.width, hero_rect.height))
print("%d %d" % hero_rect.size)
代码运行结果如下图所示:
3. 创建游戏的主窗口
pygame专门提供了一个模块pygame.display用于创建、管理游戏窗口
| 方法 | 说明 |
|---|---|
| pygame.display.set_mode() | 初始化游戏显示窗口 |
| pygame.display.update | 刷新屏幕内容显示,稍后使用 |
set_mode方法
set_mode(resolution=(0,0), flags = 0, depth = 0) -> Surface
作用--创建游戏显示窗口 参数:
- resolution指定屏幕的宽和高,默认创建的窗口大小和屏幕大小一致
- flags参数指定屏幕的附加选项,例如是否全屏等等,默认不需要传递
- depth参数表示颜色的位数,默认自动匹配
- 这三个参数可以不用传递,自动默认
返回值Surface:
暂时可以理解为游戏的屏幕,游戏的元素都需要被绘制到游戏的屏幕上
注意:必须使用变量记录set_mode方法的返回结果!因为:后续所有的图像绘制都基于这个返回结果
游戏循环
- 为了做到游戏程序启动后,不会立即退出,通常会在游戏程序中增加一个游戏循环
- 所谓游戏循环就是一个无限循环
- 在创建游戏窗口代码下方,增加一个无限循环
- 注意:游戏窗口不需要重复创建
具体代码演示如下所示:
import pygame
pygame.init()
# 创建游戏的窗口 480*700
screen = pygame.display.set_mode((480, 700))
while True:
pass
pygame.quit()
运行结果如下图所示:因为使用while语句使其一直循环,导致最终执行不到quit语句,因此,该窗口可以一直保持。在屏幕中间会显示一个480*700的窗口。