Also mache ich ein einfaches Videospiel in Pygame, und es ist sehr kurz vor dem Abschluss. Ich habe gerade an meinem Pause-Bildschirm gearbeitet, aber als ich p (die Taste, die ich gewählt habe) gedrückt habe, hat es angehalten, aber wenn ich weitermache, hat es das Spiel neu gestartet. Ich ging über den Code und fand nichts falsch. Dann ging ich zum Frageforum hier und schaute das Problem auf, ich fand etwas, aber sie tun nicht den Code, wie ich bin, und obendrein ist die Antwort schwer zu verstehen. Die Pause-Funktion ist paused()
und die Pause ist, Überraschung, unpause()
. Kannst du versuchen herauszufinden, wo es schief gelaufen ist? Hier ist mein scource Code:Wie verhindere ich, dass mein Spiel neu gestartet wird, wenn meine Pause in der Spielfunktion in pygame abgespielt wird?
import pygame
import time
import random
pygame.init()
display_width = 800
display_height = 600
dark_blue = (0,178,210)
blue = (109,178,201)
black = (0,0,0)
white = (255,255,255)
red = (255,0,0)
brown = (102, 51, 0)
ship_width = 96
gameDisplay = pygame.display.set_mode((display_width,display_height))
pygame.display.set_caption('_Asteroid Belt_')
clock = pygame.time.Clock()
thingImg = pygame.image.load("/home/pi/Desktop/asteroid.png")
shipImg = pygame.image.load('/home/pi/Desktop/spaceship.png')
bg = pygame.image.load("/home/pi/Desktop/py.png")
bgi = pygame.image.load("/home/pi/Desktop/introbg.jpg")
pause = False
def quitgame():
pygame.quit()
quit()
def unpause():
global pause
pause = False
def paused():
while pause:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
largeText = pygame.font.Font('freesansbold.ttf',115)
TextSurf, TextRect = text_objects("Paused", largeText)
TextRect.center = ((display_width/2),(display_height/2))
gameDisplay.blit(TextSurf, TextRect)
button("Start Flight",100,450,200,100,dark_blue,blue,game_loop)
button("Land on Desktop",500,450,200,100,dark_blue,blue,quitgame)
#pygame.draw.rect(gameDisplay,dark_blue,(500,450,200,100))
pygame.display.update()
clock.tick(15)
def game_intro():
intro = True
while intro:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
gameDisplay.blit(bgi,(0,0))
largeText = pygame.font.Font('freesansbold.ttf',115)
TextSurf, TextRect = text_objects("Asteroid Belt", largeText)
TextRect.center = ((display_width/2),(display_height/2))
gameDisplay.blit(TextSurf, TextRect)
button("Start Flight",100,450,200,100,dark_blue,blue,game_loop)
button("Land on Desktop",500,450,200,100,dark_blue,blue,quitgame)
#pygame.draw.rect(gameDisplay,dark_blue,(500,450,200,100))
pygame.display.update()
clock.tick(15)
def message_display2(text):
largeText = pygame.font.Font('freesansbold.ttf',115)
TextSurf, TextRect = text_objects(text, largeText)
TextRect.center = ((display_width/2),(display_height/2))
gameDisplay.blit(TextSurf, TextRect)
pygame.display.update()
time.sleep(2)
def things_dodged(count):
font = pygame.font.SysFont(None,25)
text = font.render("Dodged: "+str(count), True, white)
gameDisplay.blit(text, (0,0))
def things(x,y, thing_width, thing_height,thing_startx,thing_starty):
gameDisplay.blit(thingImg, (x,y))
def ship(x,y):
gameDisplay.blit(shipImg,(x,y))
def text_objects(text, font):
textSurface = font.render(text, True, white)
return textSurface, textSurface.get_rect()
def message_display(text):
largeText = pygame.font.Font('freesansbold.ttf',115)
TextSurf, TextRect = text_objects(text, largeText)
TextRect.center = ((display_width/2),(display_height/2))
gameDisplay.blit(TextSurf, TextRect)
pygame.display.update()
time.sleep(2)
game_loop()
def crash():
message_display("You Crashed!")
def button(msg,x,y,w,h,ic,ac,action=None):
mouse = pygame.mouse.get_pos()
click = pygame.mouse.get_pressed()
if x + w>mouse[0]>x and y+h > mouse[1] >y:
pygame.draw.rect(gameDisplay,ac,(x,y,w,h))
if click[0] == 1 and action != None:
if action == game_loop:
game_loop()
elif action == quitgame:
pygame.quit()
quit()
else:
pygame.draw.rect(gameDisplay,ic,(x,y,w,h))
smallText = pygame.font.Font('freesansbold.ttf',20)
textSurf, textRect = text_objects(msg,smallText)
textRect.center = ((x+(w/2)),(y+(h/2)))
gameDisplay.blit(textSurf, textRect)
def game_loop():
global pause
x = (300)
y = (410)
x_change=0
thing_startx = random.randrange(0, display_width)
thing_starty = -600
thing_speed = 5
thing_width = 100
thing_height = 100
dodged = 0
gameExit = False
while not gameExit:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
x_change = -20
if event.key == pygame.K_RIGHT:
x_change = 20
if event.key == pygame.K_p:
pause = True
paused()
if event.type == pygame.KEYUP:
if event .key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
x_change = 0
x+= x_change
gameDisplay.blit(bg, (0,0))
things(thing_startx,thing_starty,thing_width,thing_height,x,y)
thing_starty += thing_speed
thing_height=100
ship(x,y)
things_dodged(dodged)
if x > display_width - ship_width or x<0:
crash()
if thing_starty > display_height:
thing_starty = 0 - thing_height
thing_startx = random.randrange(0, display_width)
dodged += 1
thing_speed+=2
if y < thing_starty+thing_height:
cow = 5
if x > thing_startx and x < thing_startx + thing_width or x+ship_width > thing_startx and x+ship_width< thing_startx +thing_width:
crash()
pygame.display.update()
clock.tick(60)
game_intro()
game_loop()
pygame.quit()
quit()
Entschuldigung, ich kann wieder kommentieren (wahrscheinlich das WLAN). Aber die if-Anweisung setzt immer noch auf 0 zurück. Wäre es möglich, dodged = Nummer zu ändern? Ich denke daran, eine Funktion wie def = continue() zu machen, aber ich würde nicht die Parameter kennen, von denen es funktionieren würde. Könnte es dings_dodged sein? Aber ich fürchte, es wird immer noch 0 anzeigen. Lassen Sie mich bitte so schnell wie möglich wissen. – PiGuy
Ich kann Ihren Code gerade nicht testen, aber von dem, was ich sehen kann, wird der Wert von 'ausgewechselt' nie auf 0 zurückgesetzt, also nicht sicher, warum Sie dieses Problem haben. Haben Sie versucht, den Wert von 'dodged' zu debuggen oder zu protokollieren, um zu sehen, wie er auf 0 zurückgesetzt wird? – Fehnryr
Nein, aber ich werde versuchen zu sehen, was in diesem ausgewichenen Abschnitt vor sich geht. Ich werde dich wissen lassen, was ich finde – PiGuy