游戏中的动画效果实质上是在屏幕上进行的快速的绘制图像。
每次被绘制的结果被称为帧(
F
r
a
m
e
Frame
Frame)
游戏的两个重要组成部分:
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()
这样写会有一个错误,那就是没有保证绘制过程中的背景的更新,就会出现以下情况:
他所扫过的一片,背景都会被抹掉,要解决以上问题,要在循环内加一个背景更新的语句,并且这个语句要放在其他图像更新语句的前面:
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()
运行图片如下所示:
及时运行中经过背景图片也不会被抹去,所以一定要先对screen
进行重绘制(更新)
注意:要操作并进行移动的图像一定要提前定义为rect模式,因为只有这样才能操作他的坐标进行移动操作
事件: 就是开始游戏后,用户针对游戏所做的操作,例如点击关闭按钮,点击鼠标,点击键盘
监听: 在游戏中,判断用户的具体操作,因为只有捕获到用户的具体操作,才能作出具体的响应。
pygame
中通过 pygame.event.get()
可以获得 用户当前所做动作的事件列表
代码如下:
注解:所有的监听代码都大同小异,差不多都是如下模式,可以理解为模板:
# 游戏循环 while True: # 事件监听 for event in pygame.event.get(): # 判断用户是否点击了关闭按钮 if event.type == pygame.QUIT: print("退出游戏...") pygame.quit() # 直接退出系统 exit()