Pygame 外星人入侵 笔记(三)-- 控制游戏帧率

一、本文简介

主要记录了如何在pygame中控制帧率,解决游戏运行忽快忽慢的问题

二、问题现象

外星人入侵-没有控制帧率

运行游戏时游戏忽快忽慢

三、原因及解决方案

原因:游戏中没有控制帧率,导致游戏的运行速度受电脑CPU等资源使用的影响。
解决方法:使用pygame中的Clock()方法来控制。3行代码搞定

import pygame
from settings import Settings
from ship import Ship
import game_functions as gf
from pygame.sprite import Group
from game_stats import GameStats
from button import Button
from scoreboard import Scoreboard

def run_game():
    pygame.init()
    ai_settings = Settings()
    screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height))
    pygame.display.set_caption('Alien Invasion')
    
    // 帧率控制
    clock = pygame.time.Clock()
    FPS = 60
    
    play_button = Button(ai_settings, screen, "Play")
    ship = Ship(ai_settings, screen)
    bullets = Group()
    aliens = Group()
    stats = GameStats(ai_settings)
    scoreboard = Scoreboard(ai_settings, screen, stats)
    
    gf.create_fleet(ai_settings, screen, ship, aliens)
        
    while True:
        gf.check_events(ai_settings, screen, stats, scoreboard, ship, aliens, bullets, play_button)
        
        if stats.game_active:
            ship.update()
            gf.update_bullets(ai_settings, screen, stats, scoreboard, ship, bullets, aliens)
            gf.update_aliens(ai_settings, stats, screen, scoreboard, ship, aliens, bullets)
        gf.update_screen(ai_settings, screen, stats, scoreboard, ship, aliens, bullets, play_button)
        
        // 帧率控制
        clock.tick(FPS)
        
run_game()

效果:

外星人入侵-控制帧率

四、clock.tick()实现游戏帧率控制的原理

clock.tick(FPS) 控制游戏帧率的原理基于时间控制。几个关键概念:

  • 帧(Frame):在游戏开发中,每一帧是屏幕上显示的一次完整画面更新。游戏的动画效果和逻辑通常是通过不断更新和显示帧来实现的。
  • 帧率(Frames Per Second, FPS):帧率是指每秒钟显示的帧数。较高的帧率可以带来更流畅的动画效果,通常的帧率目标是 60 FPS。
  • 时间间隔(Delta Time):这是指每一帧之间的时间间隔。clock.tick(FPS) 函数通过控制这个时间间隔来实现固定帧率。

pygame.time.Clock 对象的 tick 方法会确保每次调用 tick 时程序都暂停足够长的时间,以使得每秒钟的帧数接近于指定的 FPS

  • 计算帧间隔:tick 方法计算自上一次调用 tick 方法以来经过的时间(以毫秒为单位)。
  • 控制帧率:根据设定的 FPS,tick 方法计算出每一帧应该持续的时间。例如,对于 60 FPS,每帧应该持续大约 16.67 毫秒(1000 毫秒 / 60 帧)。
  • 延时:如果计算得出的时间间隔小于应该持续的时间,tick 方法会让程序休眠(延时)一段时间,以确保帧率不会超过设定的值。

五、发散思考:如果游戏运行过慢怎么办

如果游戏运行过慢,帧率控制就不起作用了。可以在游戏每一帧运行完之后,让程序休眠0.1s,游戏会运行地很慢

import time

...

time.sleep(0.1)
clock.tick(FPS)
  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值