pygame中加载图片

pygame中加载位图、绘制位图

通常,游戏中需要加载大量的位图,pygame中自带了一些类和函数可以帮助我们轻松的搞定位图加载和绘制。

screen = pygame.display.set_mode
image.gif

上面的代码,我们在前几期的博客中已经使用过很多次了,实际上pygame.display.set_mode()这个函数会返回一个Surface对象,他是位图的一种。

1.加载位图

在pygame中可以使用pygame.image.load()函数来加载位图。(支持jpg,png,gif,bmp,pcx,tif,tga等多种图片格式)。

space = pygame.image.load("space.png").convert_alpha()
image.gif

convert_alpha()方法会使用透明的方法绘制前景对象,因此在加载一个有alpha通道的素材时(比如PNG TGA),需要使用convert_alpha()方法,当然普通的图片也是可以使用这个方法的,用了也不会有什么副作用。

2.绘制位图

Surface对象有一个名为blit()的方法,它可以绘制位图

screen.blit(space, (0,0))
image.gif

第一个参数是加载完成的位图,第二个参数是绘制的起始坐标。我们来看一下完整的程序和效果:

import sys, random, math, pygame
from pygame.locals import *

pygame.init()
screen = pygame.display.set_mode((800,600))
pygame.display.set_caption("星空")
font = pygame.font.Font(None, 18)

space = pygame.image.load("space.png").convert_alpha()

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
    keys = pygame.key.get_pressed()
    if keys[K_ESCAPE]:
        sys.exit()
    screen.blit(space, (0,0))

    pygame.display.update()
image.gif

做一个小例子:

在星空下放置一个地球并放置一个飞船

为了让地球可以在夜空的中间绘制,还得多写几段代码。

planet = pygame.image.load("earth.png").convert_alpha()
#获取位图的宽和高
width,height = planet.get_size()
#在屏幕的中间绘制地球
screen.blit(planet, (400-width/2,300-height/2))
image.gif

get_size()可以获取位图的宽度和高度,然后利用他们就可以在确定在屏幕的中间绘制地球了。

然后开始绘制飞船

feichuan = pygame.image.load("feichuan.png").convert_alpha()
screen.blit(feichuan,(30,30))
image.gif

但是超人图像看起来好大啊,画面比例有点不协调,还需要把超人缩小一点。

这里使用pygame.transform 这个模块可以满足我们的需求,这个模块包含了比如缩放,翻转等一些非常有用的函数。

pygame.transform.scale()这是一个快速的缩放函数,可以快速缩放一个图像,但是如果你试过以后就会发现他并不是那么的理想,像素看起来会很密集,有点怪怪的。

幸好它有一个名为pygame.transform.smoothscale()的变体,这个函数通过复杂的计算产生比较平滑的图像,当然它的运行耗时大于快速缩放函数。

feichuan = pygame.transform.smoothscale(feichuan,(width//2,height//2))
image.gif
import pygame
from pygame.locals import *
import sys

#初始化pygame
pygame.init()
# 设置屏幕宽高
screen = pygame.display.set_mode((800, 600))
# 设置屏幕标题
pygame.display.set_caption("my first game")

# 设置字体类型及大小
myfont = pygame.font.SysFont('arial', 100)

white = 255, 255, 255
black = 0, 0, 0
# 创建要显示的文字
txtImage = myfont.render("hello world", True, white)
color = 255, 255, 0

spaceImg = pygame.image.load("space.png").convert()
earthImg = pygame.image.load("planet2.png").convert_alpha()
military = pygame.image.load("military.png").convert_alpha()
weight, height = earthImg.get_size()

while True:
    # 启动消息队列,获取消息并处理
    for event in pygame.event.get():
        if event.type == QUIT:
            sys.exit()

    screen.fill(black)  # 填充背景

    screen.blit(spaceImg, (0, 0))
    military = pygame.transform.smoothscale(military, (weight // 2, height // 2))
    screen.blit(earthImg,((800-weight)/2, (600-weight)/2))
    screen.blit(military, (0,0))

    pygame.display.update()

image.gif
image
image.gif

你可能感兴趣的:(pygame中加载图片)