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 ” ,如下图所显示:

在该游戏中根据改动重型坦克图像( 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 中每个涵数的应用 。

  1. pygame.draw.rect()

    格式:pygame.draw.rect(surface, color, rect, width=0)

    pygame.draw.rect() 在 surface 上画一个矩形框,除开 surface 和 color 之外 ,rect 接受一个矩形框的坐标和图形界限主要参数 ,假如图形界限是 0 或省去,则添充。

  2. pygame.draw.polygon()

    格式:pygame.draw.polygon(surface, color, pointlist, width=0)

    polygon() 用以画不规则图形,其使用方法类似 rect(), 与 rect() 第一、第二、第 4 个主要参数全是同样的 ,只不过是 polygon()会接受一系列坐标的目录,意味着了每个端点的坐标。

  3. pygame.draw.circle()

    格式:pygame.draw.circle(surface, color, pos, radius, width=0)

    circle() 用以画一个圆,它接受一个圆心点坐标和一个半经主要参数 。

  4. pygame.draw.ellipse()

    格式:pygame.draw.ellipse(surface, color, rect, width=0)

    客户能够 把 ellipse 想像成一个被挤扁的圆 ,实际上,它能够 被一个矩形框装起來 。ellipse() 的第 3 个主要参数就是这个椭圆形的外置矩形框。

  5. pygame.draw.arc()

    格式:pygame.draw.arc(surface, color, rect, start_angle, stop_angle, width=1)

    arc() 是椭圆形的一部分,因此 它的主要参数比椭圆形多一些。但它并不是封闭式的 ,因而沒有 fill() 方式 ,start_angle 和 stop_angle 为开始与结束的视角 。

  6. pygame.draw.line()

    格式:pygame.draw.line(surface, color, start_pos, end_pos, width=1)

    line() 用以画一条直线,start_pos 和 end_pos 是直线的起始点和节点坐标。

  7. pygame.draw.lines()

    格式:pygame.draw.lines(surface, color, closed, pointlist, width=1)

    closed 是一个布尔运算自变量 ,指出是不是必须多画一条线来使这种线框合闭(那样就和 polygon() 一样了),pointlist 是一个端点坐标的数字能量数组。

本文版权归趣KUAI排www.SEOguruBlog.com 所有,如有转发请注明来出,竞价开户托管,seo优化请联系QQ→61910465