fps bremse

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Gast

wie benutze ich eine fps richtig? ich verstehe diese clock befehle noch nicht richtig
ich möchte dass auf allen rechner das spiel genauso schnell läuft wie auf meinem, und so wie ich die befehle auf pygame.org verstanden habe, muss ich
clock = pygame.time.Clock()
print clock.get_fps()
benutzen um zu sehen wie viele fps ich habe wenn mein programm läuft, aber mir wird 0.0 angezeigt...
also 1 frage: wie seh ich wieviel fps ich hab wenn meine programm läuft?

und dann dachte ich, ich muss
Clock.tick(x)
in meine while schleife schreiben, wobei x meine fps anzahl ist, damit mein programm überall so schnell läuft wie bei mir, aber das ist vermutlich auch falsch..
also 2. frage: wie stell ich ein mit wieviel fps mein program laufen soll?
BlackJack

Du musst die `tick()` Methode einmal pro Bildschirmaufbau aufrufen. Und nur wenn Du das regelmässig machst, dann kann auch die FPS-Rate berechnet und abgefragt werden.
Gast

gut mein maxiumum liegt bei ca 63, wie mach ich dass auf allen rechnern das maxiumum an fps nicht höher als 63 fps ist?
Gast

Anonymous hat geschrieben:gut mein maxiumum liegt bei ca 63, wie mach ich dass auf allen rechnern das maxiumum an fps nicht höher als 63 fps ist?
omfg sry für meine tippfehler^^
BlackJack

Hier ist ein kleines Testprogramm:

Code: Alles auswählen

#!/usr/bin/env python
from __future__ import division
import pygame

def main():
    # 
    # Initialize display.
    # 
    pygame.init()
    title = 'Bouncing Ball'
    screen_width, screen_height = 320, 240
    screen = pygame.display.set_mode((screen_width, screen_height))
    pygame.display.set_caption(title)
    
    # 
    # Create Background with centered title.
    # 
    background = pygame.Surface(screen.get_size()).convert()
    background.fill((100, 200, 150))
    title_font = pygame.font.Font(None, 60)
    title_image = title_font.render(title, True, (140, 50, 190))
    title_position = title_image.get_rect()
    title_position.center = background.get_rect().center
    background.blit(title_image, title_position)
    screen.blit(background, (0, 0))
    
    # 
    # Create (transparent) ball.
    # 
    ball_diameter = 32
    ball_radius = ball_diameter // 2
    ball = pygame.Surface((ball_diameter, ball_diameter)).convert_alpha()
    ball.fill((0, 0, 0, 0))
    pygame.draw.circle(ball,
                       (255, 255, 100, 190),
                       (ball_radius, ball_radius),
                       ball_radius)
    
    # 
    # Clock to measure FPS and/or delay drawing.
    # Initialize ball position and speed.
    # 
    clock = pygame.time.Clock()
    x = y = 0
    dx = dy = 1
    
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                return
        
        # 
        # Restore background at ball position.
        # 
        screen.blit(background, (x, y), (x, y, ball_diameter, ball_diameter))
        
        # 
        # Update balls position.
        # 
        x += dx
        y += dy
        
        # 
        # Change direction if necessary.
        # Print FPS when changing horizontal direction.
        # 
        if not 0 <= x < screen_width - ball_diameter:
            dx = -dx
            print clock.get_fps()
        if not 0 <= y < screen_height - ball_diameter:
            dy = -dy
        
        # 
        # Draw ball and display all changes.
        # 
        screen.blit(ball, (x, y))
        pygame.display.flip()

        # 
        # Measure speed and delay if argument is >0.
        # 
        clock.tick(0)   # Insert desired FPS or 0.


if __name__ == '__main__':
    main()
Bei `clock.tick(0)` die gewünschte Framerate eingeben, sollte es eigentlich gewesen sein.
Antworten