为什么我的pygame游戏这么慢?

-2 投票
1 回答
572 浏览
提问于 2025-04-18 10:21

我正在用Pygame制作一个游戏。现在屏幕上只有一个矩形在移动。这个矩形的方向可以通过键盘来改变。

main.py :

import pygame
import sys
import player
import room

# Colors
black = (0, 0, 0)
white = (255, 255, 255)
red = (255, 0, 0)
blue = (0, 255, 0)
green = (0, 0, 255)

# Global variables
S_WIDTH = 800
S_HEIGHT = 800
FPS = 60
# player speed
SPEED = 2

# Initialization 
pygame.init()
screen = pygame.display.set_mode([S_WIDTH, S_HEIGHT])
pygame.display.set_caption("Py-Man Alpha")
clock = pygame.time.Clock()

# Game class
class Game(object):
"""
This is main class of game.
All game events will happen here.
"""
Player = player.Player(blue, 50, 50, 0, 0) 
def __init__(self, screen, running):
    self.screen = screen
    self.running = running

    self.run()

def run(self):
    while self.running:
        # Events
        for event in pygame.event.get():
            # If user hits 'x'
            if event.type == pygame.QUIT:
                self.running = False
            # Keyborad events
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_UP:
                    self.Player.direction = 'up'
                    self.Player.move(SPEED, WALLS)
                elif event.key == pygame.K_DOWN:
                    self.Player.direction = 'down'
                    self.Player.move(SPEED, WALLS)
                elif event.key == pygame.K_LEFT:
                    self.Player.direction = 'left'
                    self.Player.move(SPEED, WALLS)
                elif event.key == pygame.K_RIGHT:
                    self.Player.direction = 'right'
                    self.Player.move(SPEED, WALLS)
                elif event.key == pygame.K_p:
                    self.Player.direction = 'pause'
        # Clear screen
        self.screen.fill(white)

        #Draw
        self.Player.move(SPEED, WALLS)
        self.Player.draw(self.screen)
        for wall in WALLS:
            wall.draw()

        # Set clock
        clock.tick(60)

        # Update screen
        pygame.display.flip()

    # End of game
    pygame.quit()
    sys.exit()

# Tests
game = Game(screen, True)

player.py:

#imports
import pygame

class Player(pygame.sprite.Sprite):
"""
This class represent the player image
and has the player actions.
"""
direction = 'right'
def __init__(self, color, width, height, x, y):
    # Pygame constructor
    pygame.sprite.Sprite.__init__(self)

    # Init. variables
    self.color = color
    self.width = width
    self.height = height 

    # Create sprite
    self.image = pygame.Surface([width, height])
    self.image.fill(self.color)
    self.rect = self.image.get_rect()
    self.rect.x = x
    self.rect.y = y

def draw(self, screen):
    # Draw player on the screen
    pygame.draw.rect(screen, self.color, [self.rect.x, self.rect.y, self.width, self.height], 0)

def move(self, speed, walls):
    # Move the player
    if self.direction == 'up':
        self.rect.y -= speed
    elif self.direction == 'down':
        self.rect.y += speed
    elif self.direction == 'left':
        self.rect.x -= speed
    elif self.direction == 'right':  
        self.rect.x += speed

那么,我该如何加快我的游戏速度呢?我可以怎么提高速度?我哪里做错了?谢谢!

编辑:
监视器的刷新速度很慢。我按了'上'键,但监视器要等2-3秒才反应。为什么会这样?

1 个回答

0

你可以增加 SPEED 或者 clock.tick(60)

不过我更喜欢增加 SPEED

clock.tick(60) 的意思是每秒显示 60 帧,你可以把这个数字调高,但很多显示器的刷新率是 60Hz,这也就是每秒 60 帧。如果你把帧数调得更高,CPU的工作量就会增加,这样它会变得更热,你可能还会听到风扇的声音 :)

顺便说一下:人眼至少需要 24 帧 才能看到动画。

撰写回答