@Dauerbaustelle
"genauer beschreiben" ist aber auch sehr genau beschrieben was du für Informationen brauchst
, er macht offensichtlich einen Fehler den er sich nicht erklären kann, welcher durch eine falsche Handhabung hervor geht. Da ist es schon ziemlich schwer den Fehler zu erklären wenn man ihn selbst nicht versteht.
@hopo
Dauerbaustelle hat dir schon das richtige gesagt, du erhöhst die Variable "ni" 10 mal +10 aber zeichnest nicht, da kannst du auch gleich +100 schreiben. Das Problem ist aber das du mit reinen Bildern arbeiten willst. Hierfür gibt es in pygame ein Sprite(pygame.Sprite), von diesem sollte abgeleitet werden und zB eine "Character"-Klasse erstellt werden. Diese sollte zwei Attribute besitzen, ein Bild "image"(pygame.Surface) und ein Rechteck "rect"(pygame.Rect). Das Rechteck stellt hierbei die Logik dar und hat einige zusätzliche Methoden, wie "move()" oder "move_ip()" mit denen du das Rechteck bewegen kannst.
Zum Zeichnen brauchst nimmt man hier am besten eine Gruppe(pygame.Group) und fügt die einzelnen Sprites den entsprechenden Gruppen zu. Der Sinn dabei ist alle Sprites der Gruppe gleichzeitig mit der "draw()"-Methode zu zeichnen.
Beispiel (Edit: Nun getestet):
Code: Alles auswählen
from pygame.locals import *
import pygame
class Character(pygame.sprite.Sprite):
def __init__(self, imagefile, *group):
pygame.sprite.Sprite.__init__(self, *group)
self.image = pygame.image.load(imagefile)
self.rect = self.image.get_rect()
def move(self, x, y):
self.rect.move_ip(x, y)
if __name__ == "__main__":
pygame.init()
screen = pygame.display.set_mode([720, 480])
screen.fill(Color("black"))
background = pygame.image.load("background.png")
players = pygame.sprite.Group()
tario = Character("tario.png", players)
step = 10
jump_timer = 0
clock = pygame.time.Clock()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
break
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
tario.move(-step, 0)
elif event.key == pygame.K_RIGHT:
tario.move(step, 0)
elif event.key == pygame.K_UP:
jump_timer = 10
if jump_timer > 0:
tario.move(0, -step)
jump_timer -= 1
screen.blit(background, (0, 0))
players.draw(screen)
pygame.display.flip()
clock.tick(30)
pygame.quit()