Laufendes Mänchen

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
fordprefect
User
Beiträge: 1
Registriert: Montag 21. Februar 2011, 15:12

Hi, ich möchte in einem kleinen Jump&Run die Figur Schritte machen lassen.
Dazu habe ich zwei Bilder von der Figur, die wenn man sie hintereinander ablaufen lässt das Laufen des Männchens animiert.
Mein Problem: Wie mache ich das daraus eine flüssige Animation wird. Ich habe bisher nach jedem Bild

Code: Alles auswählen

screen.blit(figur, (x, y))
pygame.display.flip()        	
pygame.time.wait(t)
Wenn ich t niedrig setze sind die Schritte viel zu schnell, und wenn ich es dann größer setze ruckelt es.
Gibts da irgendwelche Tipps eurerseits?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dazu solltest Du Dir mal das Time Modul angucken und wie man mit ticks konstante Frameraten erzeugen kann. Ich denke da wird man auch einiges via google finden.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
C4S3
User
Beiträge: 292
Registriert: Donnerstag 21. September 2006, 10:07
Wohnort: Oberösterreich

Hi,

du solltest dein Männchen zu einen nicht per Hand blitten, sondern in eine SpriteGroup stecken (pygame.sprite.Group) und dies dann mit CUD (Clear, Update, Draw) alle auf einmal auf den Bildschirm bringen. (Das hat jetzt mit deiner Frage weniger zu tun, hilft aber ungemein, wenn man die Übersicht behalten möchte).

Zu deiner Frage:
pygame.time.Clock wäre hier genau richtig.

Code: Alles auswählen

#! /usr/bin/env python
#! coding: utf-8

"""Simpliest PyGame programm.

Follow the IDEA/ALTER Framework

I - Import and initialze
D - Display
E - Entities
A - Action
    A - Assign values
    L - Loop
    T - Time
    E - Events
    R - Redraw
"""

import pygame
from pygame.locals import *

pygame.init()

screen = pygame.display.set_mode((640, 480))

bg = pygame.Surface(screen.get_size()).convert()
bg.fill((200, 100, 50))

keepGoing = True
clock = pygame.time.Clock()

while keepGoing:
    clock.tick(30)
    
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            keepGoing = False
            
    screen.blit(bg, (0,0))
    pygame.display.flip()
    
Gruß!
Antworten