【Python】pygame-项目实战(3)

322 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第7天,点击查看活动详情

1. 游戏中的坐标系

首先,我们需要理解游戏中的坐标系:只有明确了坐标系以后,我们才能在游戏窗口的准确位置绘制图像。

  • 原点在左上角(0,0)
  • x轴水平方向向右,逐渐增加
  • y轴垂直方向向下,逐渐增加

在游戏中,所有可见的元素都是以矩形区域来描述位置的

要描述一个矩形区域有四个要素:(x, y) (width, height)

pygame.Rect

pygame专门提供了一个类pygame.Rect用于描述矩形区域

提示:

  • pygame.Rect是一个比较特殊的类,内部只是封装了一些数字计算
  • 不执行pygame.init()方法同样能够直接使用
  • 其中的size属性是一个元组属性,size属性返回的第一个值是矩形宽度,第二个值是矩形高度

2. 案例演练

案例需求:

  1. 定义hero_rect矩形描述英雄的位置和大小
  2. 输出英雄的坐标原点(x和y)
  3. 输出英雄的尺寸(宽度和高度)

案例代码演示如下所示:

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)

代码运行结果如下图所示:

image.png

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的窗口。

image.png