pygame教程之关于surface

在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()             # 开了这个会一闪而过

pygame教程之surface表面

要移动这个正方形,那就需要不断地改变它的渲染坐标,并且把以前所渲染的都擦除掉。这就需要一个循环,假设正方形的坐标用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()             # 开了这个会窗口会关闭

上面的正方形向右移动,如果要让它斜着移动怎么办呢?如果读懂了上面的代码,那么相信你完全可以编写出代码来。这就当成一个小练习吧,请自行完成。

pygame移动的正方形