Seite 1 von 1

Spielfigur

Verfasst: Samstag 10. März 2018, 11:25
von krinust
Erstmal mein Code:

Code: Alles auswählen

import pygame
from pygame.locals import *

MAP_WIDTH = 500
MAP_HEIGHT = 500

class Spieler(object):
    def __init__(self, x, y, bild):
        self.x = x
        self.y = y
        self.bild = bild

    def zeichnen(self, fenster):
        fenster.blit(self.bild, (self.x, self.y))

    def bewegen(self, richtung):
        if richtung == 'N':
            self.y -= 50
        if richtung == 'S':
            self.y += 50
        if richtung == 'O':
            self.x += 50
        if richtung == 'W':
            self.x -= 50


def main():
    pygame.init()
    fenster = pygame.display.set_mode((MAP_WIDTH,MAP_HEIGHT))
    spieler_bild = pygame.image.load("spieler.png").convert_alpha()
    spieler = Spieler(0, 0, spieler_bild)
    try:
        while True:
            for event in pygame.event.get():
                if event.type == QUIT:
                    return
                elif event.type == KEYDOWN:
                    if event.key == K_RIGHT and spieler.x < MAP_WIDTH:
                        spieler.bewegen('O')
                    if event.key == K_LEFT and spieler.x > 0:
                        spieler.bewegen('W')
                    if event.key == K_UP and spieler.y > 0:
                        spieler.bewegen('N')
                    if event.key == K_DOWN and spieler.y < MAP_HEIGHT:
                        spieler.bewegen('S')

            spieler.zeichnen(fenster)
            pygame.display.update()
            
    finally:
        pygame.quit()

if __name__ == '__main__':
    main()
Irgendwann soll ein Spiel rauskommen, bei dem man mit einem Raumschiff rumfliegt und schießen kann. Mein momentanes Problem ist, dass das display nicht aktualisiert wird, also jede vorherige Position der Spielfigur bleibt beim Bewegen dieser erhalten. Wie kann ich dieses Problem lösen? Ich habe bereits probiert, dass "pygame.display.update()" vor "spieler.zeichnen(fenster)" zu schieben, das hat aber nicht geholfen.

Re: Spielfigur

Verfasst: Samstag 10. März 2018, 11:43
von __deets__
Du musst ALLES neu zeichnen. Also zb auch einen Hintergrund, oder das Display zumindest löschen.

Re: Spielfigur

Verfasst: Samstag 10. März 2018, 11:52
von krinust
Ok, danke. Ich habe bei stackoverflow das hier gefunden:

Code: Alles auswählen

  
  spieler.zeichnen(fenster)
  pygame.display.update()
  fenster.fill((0,0,0))
Es funktioniert auch, ich frage mich nur, ob es immer so klappt. Was ist, wenn der Hintergrund nicht einfarbig ist, sondern irgendetwas anderes?

Re: Spielfigur

Verfasst: Samstag 10. März 2018, 12:06
von __deets__
Dann malst du das halt. Bei einem weiter entwickelten spiel hast du ja zb einen auf Kacheln basierenden Level-Hintergrund. Der wird jedes Mal gezeichnet. Dazu ist es zb auch üblich eine (meistens feste) z-Koordinate einzuführen, nach der man alle Bildelemente sortiert, um sie dann von unten nach oben zu malen.

Re: Spielfigur

Verfasst: Sonntag 11. März 2018, 12:53
von Astorek
Gleich mal eine Warnung vorneweg: Du wirst früher oder später auch eine Lösung finden müssen, um nur die geänderten Elemente des Bildschirms neu zu zeichnen ("pygame.display.update" nimmt dafür auch Parameter), da ansonsten bei größeren Fenstern irgendwann die Framerate sehr schnell in die Knie geht. Je nachdem, welche Sorte Spiel du programmieren willst^^.

Siehe dazu etwa "A Newbie Guide to pygame", insbesondere der Punkt "Dirty rect animation."

Wollte das einfach schonmal vorausschicken, weil da früher oder später jeder Pygame-Programmierer drauf stößt, wenn man etwas größere Projekte (bspw. ein Jump'n Run) damit programmieren will...

Re: Spielfigur

Verfasst: Sonntag 11. März 2018, 18:40
von krinust
@Astorek Ok, gut zu wissen :) Kannst du noch andere Tutorials für Pygame empfehlen? Ich habe da noch nicht so viel gefunden, und wenn, weiß ich immer nicht, ob die Qualität gut ist.

Re: Spielfigur

Verfasst: Donnerstag 15. März 2018, 13:12
von krinust
Hat noch jemand eine Tutorial-Empfehlung?

Re: Spielfigur

Verfasst: Donnerstag 15. März 2018, 14:21
von __deets__
Nix ausser den offiziellen: https://www.pygame.org/wiki/tutorials

Re: Spielfigur

Verfasst: Donnerstag 15. März 2018, 15:11
von Astorek
"Making Games with Python and Pygame"

Ansonsten gilt, was bei allen anderen Programmiersprachen auch gilt: Ausprobieren, ausprobieren, ausprobieren ;) . Gelegentlich scheitern, weil es einfach dazugehört. Und Quelltexte von anderen Projekten ansehen, um zu sehen, wie derjenige das eine oder andere Problem gelöst hat...