pygame里如何确定帧数

pygame里如何确定帧数,第1张

帧数不稳定,帧数低,可以按照以下方法设置下。

1、重新安装显卡驱动,优先下载最新版本的。

2、在显卡控制面板里面--管理3D设置--选择性能优先。

3、把3D预渲染帧数调低一点。

4、电源管理里面设置最高性能优先

能显示

在一个游戏中,显示的控制也是一个比较重要的东西,在不同的机器上,界面刷新的频率不一样(也就是fps不一样),这样照成的结果就是

在不同情况下,基于帧的动画的效果会不同,本次将控制帧率

显示帧率

一般来说,pygame提供了一个控制帧率的方法,但是在低端机会照成帧率跟不上的情况,我们先显示一下帧率

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

import pygame

from pygame import QUIT

# 1. 先初始化游戏框架

pygame.init()

# 2. 创建一个窗口

screen = pygame.display.set_mode((300,150),0,32)

# 加载字体 (使用系统字体)

font = pygame.font.SysFont('arial', 16)

# 运行标志

running = True

# 案件方向

mouse = (0,0)

mouse_move = (0,0)

mouse_key = None

text = 'fps: %s'

fps = 0

FPS_MAX = 60

clock = pygame.time.Clock()

# 1. 游戏死循环

while running:

# 2. 获取事件流

for event in pygame.event.get():

# 3. 处理事件流

if event.type == QUIT:

# 结束运行

running = False

# 2.1 屏幕填充白色

screen.fill((0xff,0xff,0xff))

# 2.3 渲染文字

text_surface = font.render(text % fps ,True,(0xff,0,0))

# 2.4 贴图文字

screen.blit(text_surface,(0,0))

# 3. 刷新显示窗口

pygame.display.flip()

passed_time = clock.tick()

print(passed_time)

if passed_time <=0 :

passed_time = 1

fps = int(1/passed_time*1000)

# 4. 退出框架

pygame.quit()

import pygame

from plane_sprites import*

from Background import BackGround

from Enemy import Enemy

from Hero import Hero

from time import sleep

from Bullet import Bullet

class Plane_main(object):

def __init__(self):

print('游戏初始化')

self.screen = pygame.display.set_mode(SCREEN_RECT.size)

self.clock = pygame.time.Clock()

self.__create_sprites()

pygame.time.set_timer(CREATE_ENEMY_EVENT,1000)

pygame.time.set_timer(HERO_FIRE_EVENT, 500)

self.count = 0

self.score = 0

def __create_sprites(self):

# 背景组

self.back_group = pygame.sprite.Group()

bg1 = BackGround()

bg2 = BackGround(True)

pygame.mixer.init()

pygame.mixer.music.load("./Capo Productions - Journey 00_00_00-00_00_59.ogg")

pygame.mixer.music.play(-1)

self.back_group.add(bg1,bg2)

# 敌机组

self.enemy_group = pygame.sprite.Group()

#敌级销毁组

self.enemy1_down_group=pygame.sprite.Group()

# 英雄组

self.hero_group = pygame.sprite.Group()

self.hero = Hero()

self.hero_group.add(self.hero)

def start_game(self):

pygame.init()

print("开始游戏...")

# pygame.mixer.init()

# pygame.mixer.music.load("./Capo Productions - Journey 00_00_00-00_00_59.ogg")

# pygame.mixer.music.play(-1)

# gameIcon = pygame.image.load("./name.png")

# pygame.display.set_icon(gameIcon)

while True:

self.count+=1

# 1. 设置刷新帧率

self.clock.tick(10)

# 2. 事件监听

self.__event_handler()

# 3. 碰撞检测

self.__check_collide()

# 4. 更新精灵组

self.__update_sprites()

# 5. 更新屏幕显示

pygame.display.update()

def __event_handler(self):

"""事件监听"""

for event in pygame.event.get():

if event.type == pygame.QUIT:

Plane_main.__game_over()

elif event.type == CREATE_ENEMY_EVENT:

self.enemy_group.add(Enemy())

elif event.type == HERO_FIRE_EVENT:

self.hero.fire()

keys = pygame.key.get_pressed()

if keys[pygame.K_RIGHT]:

print('向右移动')

self.hero.speed = 5

self.hero.speed1 = 0

elif keys[pygame.K_LEFT]:

print('向左移动')

self.hero.speed = -5

self.hero.speed1 = 0

elif keys[pygame.K_UP]:

print('向上移动')

self.hero.speed1 = -5

self.hero.speed = 0

elif keys[pygame.K_DOWN]:

print('向下移动')

self.hero.speed1= 5

self.hero.speed = 0

else:

self.hero.speed = 0

self.hero.speed1 = 0

if event.type == HERO_FIRE_EVENT:

self.hero.fire()

print('发射子d!!!!!')

def __check_collide(self):

"""碰撞检测"""

# 1. 子d摧毁敌机

enemy_down = pygame.sprite.groupcollide(self.enemy_group, self.hero.bullets,True, True)

enemy1_down_group.add(enemy_down)

# 2. 敌机撞毁英雄

enemies = pygame.sprite.spritecollide(self.hero, self.enemy_group, True)

# 判断列表时候有内容`

if len(enemies) >0:

sleep(3)

# # 让英雄牺牲

self.hero.kill()

# 结束游戏

Plane_main.__game_over()

def __update_sprites(self):

self.back_group.update()

self.back_group.draw(self.screen)

self.enemy_group.update()

self.enemy_group.draw(self.screen)

self.hero_group.update()

self.hero_group.draw(self.screen)

self.hero.bullets.update()

self.hero.bullets.draw(self.screen)

self.drawText(str(self.score),SCREEN_RECT.width - 50,50)

for enemy1_down in enemy1_down_group:

self.screen.blit(enemy1_down_surface[enemy1_down.down_index],enemy1_down.rect)

if self.count % 5 ==0:

enemy1_down.down_index += 1

if enemy1_down.down_index ==3:

# pygame.mixer.music.load("./baozha.ogg")

# pygame.mixer.music.play()

self.score+=5

enemy1_down_group.remove(enemy1_down)

print(self.score)

#更新精灵组

# for group in [self.back_group, self.enemy_group, self.hero_group,self.hero.bullets]:

# group.update()

# group.draw(self.screen)

@staticmethod

def __game_over():

"""游戏结束"""

print("游戏结束")

pygame.quit()

exit()

def drawText(self,text,posx,posy,textHeight=48,fontColor=(0,0,0),backgroundColor=(111,225,1)):

fontObj = pygame.font.Font('freesansbold.ttf',textHeight)

textSurfaceObj = fontObj.render(text,13,fontColor,backgroundColor)

textRectObj = textSurfaceObj.get_rect()

textRectObj.center = (posx,posy)

self.screen.blit(textSurfaceObj,textRectObj)

#判断当前执行的文件是否是主文件

#如果不是 则if下的代码不会执行

if __name__ == '__main__':

game = Plane_main()

game.start_game()


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11359490.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存