Pygame学习(一)初识

一、python的GLI和GUI界面

python的内建函数编写python程序时只能通过input和print来处理文本。程序可以在屏幕上显示文本,这一类程序

称之为命令行界面(CLI)。这种程序存在很大的局限性,它们不能显示图形而且没有颜色,也不能够使用鼠标,

所能接受的输入input只能通过键盘输入(必须按下回车),这就意味着对于用户的每一次操作都不是实时的,因

此这种程序不能够满足制作有实时动作的游戏。而pygame提供了图形化用户界面(GUI)来创建游戏的功能,使

用基于图形的GUI的程序可以显示带有图像和颜色的窗口,而不是一个基于文本的CLI;

二、pygame的简单语法(游戏框架)

import pygame,sys
from pygame.locals import *        #导入必备的程序包
pygame.init()                      #游戏资源初始化
DISPLAY=pygame.display.set_mode((windowwide,windowheight))
#游戏窗口大小设置
pygame.display.set_caption('game name')
#游戏窗口名称设置
while True:
    for event in pygame.event.get(): #获取用户的输入数据
        if event.type==QUIT:
            pygame.quit()          #游戏资源释放
            sys.exit()             #游戏退出
    pygame.display.update()        #界面更新

下面我们来简单的介绍一下以上代码的含义:

1)import pygame,sys from pygame.locals import * 用于导入自己所需要的模块。

这两者的区别前者会导入模块之中所有的子模块,后者只在特定模块中导入程序员所要的模块,使用后者在调用

模块中的函数时可以省略掉模块名称直接使用函数名来调用(就好像程序的内建函数一样)。

2)pygame.init(),对于每一个游戏在运行之前都要调用该函数。

3)程序中的while函数(死循环),为游戏的主体部分,要想退出只能在循环内通过break或者sys.exit()进行退出

在循环体内主要做了三件事情:处理事件,更新游戏状态,绘制游戏状态;(game loop

(注:这里的游戏状态就是我们在游戏中所定义的变量,事件就是指对应响应的处理函数)

4)pygame.event.Event对象:当用户对界面进行按键或者鼠标点选等操作后,pygame会创建一个pygame.event.Event

对象来记录这些动作。我们可以通过pygame.event.get()来判断发生了那些动作,此函数返回的是一个pygame.event.Event

对象的列表。

5)游戏退出(quit):通过 pygame.quit()pygame.exit() 进行退出;

三、函数、方法、构造函数以及模块中的函数的区别

函数和方法都可以通过调用来执行其中的代码,它们的区别就是方法总要附加给一个对象而函数一般用来处理事件;

构造函数是用于返回新的对象的函数,通常首字母大写开头,通过点运算符"."可以使用对象所具有的方法(方法调用);

通过模块的操作是函数调用而不是方法调用;

四、Surface对象和窗口,颜色(Color),Rect对象

通过 pygame.display.set_mode() 来返回一个页面对象通过 pygame.display.update() 来实现对其的更新;

颜色主要通过元组或者Color对象来进行表示

(红,绿,蓝)或者pygame.Color(红,绿,蓝);每一种颜色取值范围为【0,255】;

在pygame中有两种方法表示矩形区域一个是通过元组另一个是通过矩形对象

(X,Y,Width,Height)或者pygame.Rect(X,Y,Width,Height)

通过Rect的内置属性我们可以很容易获取自己想要的坐标位置

left 获取左侧坐标,right 获取右侧坐标,top 获取上侧坐标,bottom 获取下侧坐标,centerxcentery 获取中心坐标;

当对其中一个进行改变时另外的属性也会进行相应的改变。(常用的是 centerx 和 centery)

五、基本的图像绘制函数

1)pygame.draw.polygon(surface,color,pointlist,width) 绘制多边形

在这里pointlist是一个元组,里面包含了多边形相互连接的点的集合;

2)pygame.draw.line(surface,color,start_point,end_point,width) 绘制直线

在起始点和终止点之间绘制一条线段;

3)pygame.draw.circle(surface,color,center_point,r,width)

以center_point为圆心r为半径绘制一个圆

4)pygame.ellipse(surface,color,rect_tuple,width)  根据一个矩形来绘制一个椭圆

5)pygame.draw.rect(surface,rect_tuple,width)  绘制一个矩形

六、帧速率&其他

1)播放声音(增加游戏效果)

#获取音频信息,这里的音频信息支持wav,mp3,midi格式
soundobj=pygame.mixer.Sound('音频路径')    #获取音频对象
soundobj.play()                           #播放音频信息

pygame.mixer.music.load('音频路径')
pygame.mixer.music.play(-1,0.0)  #实现背景音乐循环播放

pygame.mixer.music.stop() #停止音乐播放

2)界面刷新速率(界面刷新)

帧速率或者是刷新速率是指程序中每秒绘制的图像数目。(如果游戏中包含的代码过多会出现卡顿的情况)

创建一个Clock对象:fpsClock=pygame.time.Clock()

在主循环的最后一部分实现游戏的暂停效果,避免刷新过快:fpsClock.tick(fps)

(当fps的值越大时程序运行越快,越小时程序运行的较慢)

除此之外我们也可以用 time.sleep(‘休眠时间’) 来解决游戏刷新过快的情况。

3)精灵的绘制(图片的加载)

通过pygame.image.load()函数返回一个surface对象,通过blit将此对象复制到所要绘制的surface之上(主界面)

load函数所接受的参数为图片的url信息,对于 blit() 方法有两个参数对一个参数是要绘制的surface对象,第二个

参数是其所要复制到的位置的左上角的X和Y坐标(通常用元组来表示)

发布了79 篇原创文章 · 获赞 81 · 访问量 5714

猜你喜欢

转载自blog.csdn.net/weixin_44638960/article/details/103626430