pyagme 图像/图形绘制,


pygame 图像 / 图形绘制

1. pygame 的图像绘制

pygame 支持多种存储图像的方式(也就是图片格式),例如 JPEG、PNG 等,具体支持 JPEG (一般扩展名为 .jpg 或者 .jpeg ,数码相机、网上的图片基本上都是这种格式,这是一种有损压缩方式,尽管对图片的质量有所损坏,但对于减小文件尺寸很有帮助,其优点很多,只是不支持透明)、PNG(支持透明,无损压缩)、GIF(网上使用得很多,支持透明和动画,但只能有 256 种颜色,在软件和游戏中的使用很少)以及 BMP、PCX、TGA、TIF 等格式。

pygame 使用 surface 对象来加载绘制的图像。对于 pygame ,加载图片使用 pygame.image.load(), 给它一个文件名然后返回一个 surface 对象。尽管载入的图像格式不同,但 surface 对象隐藏了这些不同。用户可以对一个 surface 对象进行涂画、变形、复制等各种操作。事实上游戏屏幕也只是一个 surface, pygame.display.set_mode() 返回了一个 surface 对象。

对于任何一个 surface 对象,可以用 get_width() 、get_height() 和 get_size() 函数来获取它的尺寸,get_rect() 用来获取它的区域形状。

例:使用 pygame 开发一个显示坦克自由移动的游戏窗口

import pygame


def tank():
    
    pygame.init()
    tank_image = pygame.image.load("tank.png")
    tank_rect = tank_image.get_rect()
    screen = pygame.display.set_mode((400, 600))
    pygame.dispaly.set_caption("自由移动的tank")
    screen_rect = screen.get_rect()
    color_back = (255, 255, 255)
    tank_speed = [1, 1]
    fps_clock = pygame.time.Clock()
    
    while True:
        fps_clock.tick(60)
        for event in pygame.event.get():
            if evnet.type == pygame.QUIT:
                pygame.quit()
                exit()
		tank_rect = tank_rect.move(tank_speed)
        if tank_rect.left < 0 or tank_rect.right > screen_rect.right:
            tank_speed[0] = -tank_speed[0]
        if tank_rect.top < 0 or tank_rect.bottom > screen_rect.bottom:
            tank_speed[1] = tank_speed[1]
        screen.fill(color_back)
        screen.blit(tank_image, tank_rect)
        pygame.display.update()
      

if __name__ == '__main__':
    tank()

程序运行后,可以看到白色背景的游戏窗口,标题是“自由移动的 tank ”,如下图所示:

image-20200703192037735

在该游戏中通过修改塔克图像( surface 对象)区域的 left 属性(可以认为是 x 座标)、 surface 对象的 top 属性(可以认为是 y 属性)改变坦克位置,从而显示出坦克自由移动的效果。在窗口(窗口也是 surface 对象)使用的 blit() 函数上绘制坦克图像,最后注意需要更新窗口显示内容。

设置 fps_clock 变量的值即可控制创建刷新速度,语法如下:

fps_clock = pygame.time.Clock()

在无限循环中写入 fps_clock.tick(60) ,可以按指定帧频 60 更新游戏画面(即每秒刷新 60 次屏幕)。


2.pygame 的图形绘制

在屏幕上绘制各种图形时使用 pygame.draw 模块中的一些函数,事实上,pygame 可以不加载任何图片,而使用图形来制作一个游戏。

pygame.draw 中的函数的第 1 个参数总是一个 sueface , 然后是颜色,接着是一系列的座标等。对于计算机中的座标,(0,0)代表左上角,水平向右为 X 轴的正方向,垂直向下为 Y 轴的正方向。该函数的返回值是一个 rect 对象,包含了绘制的区域,这样就可以很方便的更新那一部分了。pygame.draw 中的函数如下表所示:

函数 作用 函数 作用
rect() 绘制矩形 line() 绘制线
polygon() 绘制多边形(3个及3个以上的边) lines() 绘制一系列的线
circle() 绘制圆 aaline() 绘制一根平滑的线
ellipse() 绘制椭圆 aalines() 绘制一系列平滑的线
arc() 绘制圆弧

下面详细说明 pygame.draw 中各个函数的使用。

相关内容

    暂无相关文章

评论关闭