ZZA的项目学习开发文档5/1

游戏循环 和 游戏时钟

游戏中的动画效果实质上是在屏幕上进行的快速的绘制图像
每次被绘制的结果被称为帧( F r a m e Frame Frame)

游戏的两个重要组成部分:
ZZA的项目学习开发文档5/1

简单动画的实现:

游戏循环的作用:

1.保证游戏能一直运行下去,不会出现运行完自动退出的情况。

2.变化图像位置 ——动画效果
①:每隔····秒移动一下图像的位置。
②:调用pygame.display.update()更新屏幕显示。

3.检测用户交互——利用键盘或者鼠标实现对游戏的控制。

游戏时钟的作用:

pygame中专门有控制帧率的类:pygame.time.Clock(),可以进行控制帧率。

要使用时钟对象需要两步:
1.游戏初始化创建一个时钟对象
2.在游戏循环中调用tick()

举例代码实现:

import pygame, sys

from pygame.locals import *

pygame.init()

# 时钟对象的初始创建
clock = pygame.time.Clock() 

screen = pygame.display.set_mode((800, 800))

bg1 = pygame.image.load(r'C:\Users\TOMMY\Desktop\carrot.png')

# rect型的创建,表示要移动的图像的位置属性,再循环中方便利用他的属性来实现图像的移动

bg1_rect = pygame.Rect(0, 0, 100, 100)

# 2> 绘制在屏幕
screen.blit(bg1, (100, 100))

pygame.display.update()  #刷新屏幕内容

while True:
    clock.tick(60)

    bg1_rect.y -= 1

    if bg1_rect.y + bg1_rect.height <= 0:
        bg1_rect.y = 700

    screen.blit(bg1, bg1_rect)

    pygame.display.update()

    for event in pygame.event.get():   # 循环获取事件
        if event.type == QUIT:  # 若检测到事件类型为退出,则退出系统
            pygame.quit()
            sys.exit()


这样写会有一个错误,那就是没有保证绘制过程中的背景的更新,就会出现以下情况:
ZZA的项目学习开发文档5/1
他所扫过的一片,背景都会被抹掉,要解决以上问题,要在循环内加一个背景更新的语句,并且这个语句要放在其他图像更新语句的前面:

import pygame, sys

from pygame.locals import *

pygame.init()

clock = pygame.time.Clock()

screen = pygame.display.set_mode((610, 610))

bg1 = pygame.image.load(r'C:\Users\TOMMY\Desktop\carrot.png')

bg_screen = pygame.image.load(r'C:\Users\TOMMY\Desktop\love.png')

bg1_rect = pygame.Rect(100, 100, 100,    100)

while True:
    clock.tick(60)

    bg1_rect.y -= 1

    if bg1_rect.y + bg1_rect.height <= 0:
        bg1_rect.y = 700

    screen.blit(bg_screen, (0, 0))

    screen.blit(bg1, bg1_rect)

    pygame.display.update()

    for event in pygame.event.get():   # 循环获取事件
        if event.type == QUIT:  # 若检测到事件类型为退出,则退出系统
            pygame.quit()
            sys.exit()

运行图片如下所示:
ZZA的项目学习开发文档5/1
及时运行中经过背景图片也不会被抹去,所以一定要先对screen进行重绘制(更新)

注意:要操作并进行移动的图像一定要提前定义为rect模式,因为只有这样才能操作他的坐标进行移动操作

游戏循环中的 监听 和 事件

事件: 就是开始游戏后,用户针对游戏所做的操作,例如点击关闭按钮,点击鼠标,点击键盘

监听: 在游戏中,判断用户的具体操作,因为只有捕获到用户的具体操作,才能作出具体的响应。

pygame 中通过 pygame.event.get()可以获得 用户当前所做动作的事件列表

代码如下:
注解:所有的监听代码都大同小异,差不多都是如下模式,可以理解为模板:

# 游戏循环
while True:
    # 事件监听
    for event in pygame.event.get():
    
        # 判断用户是否点击了关闭按钮
        if event.type == pygame.QUIT:
            print("退出游戏...")

            pygame.quit()

            # 直接退出系统
            exit()
上一篇:Linux screen - 多重窗口管理


下一篇:TWebBrowser 与 MSHTML(4): location、history、screen、navigator 对象的属性与方法纵览