Objekte nicht übermalen Strichmännchenspiel

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
M&M's_Knabberer
User
Beiträge: 34
Registriert: Sonntag 27. September 2015, 17:05

Habe mal eine Pygame Frage.. bezüglich der "übermalung" also, habe ein Strichmännchen animiert, das über den Bildschirm läuft (War mein großer Wunsch, habs endlich geschafft^^) so nun hab ich aber das Problem, dass wenn zb ein weiteres Bildobjekt unbewegt auf dem Bildschirm sein soll, das Männchen das praktisch wegwischt, wegen dem übermalen der alten Männchenbilder..
Wie könnte man soetwas machen, dass weitere Objekte nicht verdeckt werden?

Oder, gibt es eine Methode ohne ein übermalen?
Hier mal zum Verständniss mein quellcode:

Code: Alles auswählen

import pygame
pygame.init()
screen = pygame.display.set_mode([500, 500])
screen.fill ([255, 255, 255])

bild = pygame.image.load("C:\\..\\Mann1.png")
bild2 = pygame.image.load("C:\\..\\Mann2.png")
x = 50
y = 50

def lauf():
    screen.blit(bild, [x,y])
    pygame.display.flip()
    pygame.time.delay(100)
    pygame.draw.rect(screen, [255,255,255], [x,y,63,48],0)
        
    screen.blit(bild2, [x,y])
    pygame.display.flip()
    pygame.time.delay(100)    
    pygame.draw.rect(screen, [255,255,255], [x,y,63,48],0)
   
  
while True:

    for zaehler in range (1,20):
        x = x+5
        lauf()        

    for zaehler in range (1,20):
        x = x-5
        lauf()
Also wie gesagt das Programm lässt ein Strichmännchen über den Bildschirm von links nach rechts laufen..

würde ich jetz halt weitere Objekte einfügen, dann werden die beim laufen bzw berühren verdeckt und erscheinen nicht neu, zumindest habe ich nicht verstanden wie man das machen könnte.
Später wenn ich dann Key-Steuerung mit einbaue, soll halt auch von Objekten abprallen etc.. und dazu sollten die Objekte halt auch sichtbar bleiben. :)

Ich konnte bisher leider auch keinen Befehl finden um ein Hintergrundbild einzufügen..

Bin noch Anfänger daher bitte ich um Verständnis wenn euch die Frage komisch vorkommen mag danke :)
Zuletzt geändert von Anonymous am Freitag 13. November 2015, 21:46, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
__deets__
User
Beiträge: 14480
Registriert: Mittwoch 14. Oktober 2015, 14:29

Der Trick ist ganz simpel: alles einfach in der richtigen Reihenfolge neu malen. Das war's. Im Grunde musst du dir das vorstellen als ob du mit ausgeschnittenen Fotos oder so etwas eine Kollage machst. Zuerst malst du das, was in den Hintergrund kommt. Dann von hinten nach vorne alles andere.

Die pygame Bibliothek hat dafuer Sprites, die auch "layered updates" kennen, mit denen du also genau festlegen kannst, was wann gemalt wird.
BlackJack

@M&M's_Knabberer: Es gibt keine spezielle Funktion für ein Hintergrundbild weil das halt auch einfach etwas ist was man ganz normal „blitted“. Statt das Männchen mit einem schwarzen Rechteck zu ”löschen” musst Du an der Stelle den Hintergrund zurück ”blitten”. Also entweder den entsprechenden Ausschnitt aus dem Hintergrundbild/-Surface, oder Du musst vor dem zeichnen des Männchens das Rechteck was betroffen ist in einem weiteren Surface sichern und danach zurück ”blitten”.

Du könntest Dir auch mal das `pygame.sprite`-Modul anschauen und Dein Männchen von einer `Sprite`-Basisklasse ableiten.
M&M's_Knabberer
User
Beiträge: 34
Registriert: Sonntag 27. September 2015, 17:05

ok danke ersteinmal, also muss ich mich erstmal mit Sprites auseinandersetzen..
gut dann vielleicht ist das die Lösung :)
Antworten