在pygame中有一个Surface概念,它的中文意思为表面。它用来代表图像,当新建了一个surface时,它是一幅黑色的图形。这个图形是以左上角为原点的。
用screen = pygame.display.set_mode((width,height))建立的是一个surface,width和height是surface的宽度和高度。
用type(screen)查看,结果是<class ‘pygame.Surface’>。它通常用于在pygame的游戏主循环中最先被渲染的图形。
当然,只有一个surface,那么在pygame中只会显示一个黑乎乎的界面。通常我们会建立更多的surface,然后把这些surface依次渲染到screen上。
请在IDLE中输入以下命令测试:
>>> import pygame >>> pygame.init() (6, 0) >>> width,height = 800,600 >>> screen = pygame.display.set_mode((width,height)) >>> type(screen) <class 'pygame.Surface'> >>>
现在,我们来建立另一个surface,用 square = pygame.Surface((360,360)) 命令,新建一个叫square的,宽度和高度是360和360像素的正方形。
现在,这个正方形是黑色的,如果我们把它渲染到screen上,什么也看不见,还是黑乎乎的一片。通过square.fill((255,0,0))把它的颜色填充为红色。
然后用screen.blit(square,(100,100))就能把square渲染到screen上。如果不能理解渲染的意思,可以理解为把square贴到screen上即可。
贴在屏幕坐标左上角(100,100)的位置。到此为正方形还是没有显示出来,要把它显示出来还有最后一步,就是刷新屏幕显示。调用pygame.display.update()即可。
成功后在分辨率为800×600的黑色屏幕上会显示一个大大的红色正方形。请输入以下命令测试。
>>> square = pygame.Surface((360,360)) >>> square.fill((255,0,0)) <rect(0, 0, 360, 360)> >>> screen.blit(square,(100,100)) <rect(100, 100, 360, 360)> >>> pygame.display.update() >>>
最后,退出pygame可以用pygame.quit()命令。以下是完整的代码,加了一个窗口标题:
"""
pygame教程之surface表面
在pygame中有一个Surface概念,它的中文意思为表面。.
它用来代表图像,当新建了一个surface时,它代表内存中的一幅黑色的图形。
"""
import pygame # 导入pygame模块
pygame.init() # pygame初始化
width,height = 800,600 # 定义全局变量
screen = pygame.display.set_mode((width,height)) # 新建屏幕,它是一个surface
pygame.display.set_caption("pygame教程之surface表面,作者:李兴球")
square = pygame.Surface((360,360)) # 新建square,它是一个surface
square.fill((255,0,0)) # 填充square为红色
screen.blit(square,(100,100)) # 把square贴在screen上
pygame.display.update() # 刷新合成后的屏幕显示
#pygame.quit() # 开了这个会一闪而过
要移动这个正方形,那就需要不断地改变它的渲染坐标,并且把以前所渲染的都擦除掉。这就需要一个循环,假设正方形的坐标用x,y表示,它每次水平移动的距离用dx表示,我们把正方形变小,通过for循环500次,不断地填充背景屏幕,不断地渲染正方形,这个速度很快,让它 移动起来。代码如下所示:
"""
移动500次的红色小正方形。
"""
import pygame # 导入pygame模块
pygame.init() # pygame初始化
width,height = 800,600 # 定义全局变量
screen = pygame.display.set_mode((width,height)) # 新建屏幕,它是一个surface
pygame.display.set_caption("pygame教程之surface表面,作者:李兴球")
square = pygame.Surface((36,36)) # 新建square,它是一个surface
square.fill((255,0,0)) # 填充square为红色
x , y = 100,100 # 代表矩形的渲染坐标
dx = 1 # 代表矩形每次移动的水平距离
for n in range(500):
screen.fill((0,0,0)) # 填充屏幕为黑色
screen.blit(square,(x,y)) # 把square贴在screen上
x = x + dx # 水平坐标增加dx
pygame.display.update() # 刷新合成后的屏幕显示
#pygame.quit() # 开了这个会窗口会关闭
上面的正方形向右移动,如果要让它斜着移动怎么办呢?如果读懂了上面的代码,那么相信你完全可以编写出代码来。这就当成一个小练习吧,请自行完成。


