Problem mit Programm oder Fehler in Pygame

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
Tobs
User
Beiträge: 65
Registriert: Sonntag 29. September 2013, 11:11

Ich habe folgendes Programm geschrieben mit dem ich Schwerkraft simulieren wollte:

Code: Alles auswählen

import pygame as p
p.init()
screen = p.display.set_mode([100,500])
p.display.set_caption("Schwerkraft")
clock = p.time.Clock()
a = 0.1 #Beschleunigung
speed = 0 #aktuelle Geschwindigkeit
down = 30 #y-Koordinate der Unterseite des Rechtecks
y = 0 #y-Koordinate der Oberseite des Rechtsecks
up = False #True, wenn Pfeiltaste nach oben gedrückt

while True:

    clock.tick(30)
    for event in p.event.get(): #Legt up fest
        if event.type == p.KEYDOWN and event.key == p.K_UP:
            up = True
        if event.type == p.KEYUP and event.key == p.K_UP:
            up = False
    if up: #Beschleunigung wirkt entgegen wenn gedrückt
        speed -= 2*a
    else:
        speed += a #Ansonsten wirkt die Schwerkraft
    if speed < 0: #Wenn es nach oben geht
        if not y + speed < 0:
            y += speed
        else:
            speed = 0
            y = 0
            down = 30
    if speed > 0: #Wenn es nach unten geht
        if not down + speed > 500:
            down += speed
            y = down - 30
        else:
            speed = 0
            down = 500
            y = 470
    else: #Verzweifelter Versuch den Rumportefehler zu beheben
        pass
    screen.fill([0,0,0])
    p.draw.rect(screen,[255,0,0],[0,y,100,30],0)
    p.display.flip()

Mein Problem ist, dass ich erreichen wollte, dass ich durch das drücken der Pfeiltaste nach oben
der Schwerkraft mit der doppelten Beschleunigung entgegenwirken wollte.
Das funktioniert zwar, aber wenn ich die Pfeiltaste loslasse portet sich mein Viereck(s.programm)
wieder an die Stelle zurück, an der ich die Pfeiltaste nach oben gedrückt habe, könnt ihr mir helfen?
BlackJack

@Tobs: Fehler in Pygame ist witzig. *Du* verwaltest die vertikale Position, das kannst Du Pygame nicht anlasten. Du solltest einfach mal nur *eine* Variable dafür verwenden und nicht zwei verschiedene. ;-)
Tobs
User
Beiträge: 65
Registriert: Sonntag 29. September 2013, 11:11

Deshalb hab ich es ja nicht nach Pygame, sondern nach Allgemeine Fragen gerichtet, weil ich mir schon gedacht hab, dass es ein Fehler von mir war :-)
Danke für deine Hilfe
Antworten