2014-06-19 40 views
-2

我在Pygame中做一個遊戲。現在我只有一個矩形正在屏幕上移動。矩形的方向可以從鍵盤改變。爲什麼我的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秒後監聽命令。爲什麼?

+3

這個問題似乎是題外話,因爲它是關於改善工作的代碼,它可能是更適合codereview.stackexchange.com –

+0

您是否嘗試過增加'SPEED'變量?我敢打賭,這會給你更多的速度。 – Kevin

+0

什麼是慢?刷新屏幕或播放器的速度? – daouzli

回答

0

可以增加SPEEDclock.tick(60)

但我更喜歡增加SPEED

clock.tick(60)意味着60 FPS,你可以增加它,但許多顯示器刷新其屏幕60Hz,這意味着60 FPS。更大的FPS用於CPU更多的工作,所以它是熱,你可以聽到CPU風扇:)

BTW:人眼至少需要24 FPS看動畫。