2016-11-02 1 views
1

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() 

Antwort

0

In meinem Code, stelle ich die unpause Taste Funktion game_loop() statt unpause(). Also jedes Mal, wenn ich zum Pausieren ging, habe ich die Spielschleife neu gestartet! Dies ist ein Beispiel, dass Sie auf jeden Abschnitt Ihres Codes achten müssen, nicht nur auf die Funktion, die schief läuft.

0

Es scheint, dass Sie nicht in Ihrem pause() Funktion do unpause.

Sie sollten so etwas wie dies das Hinzufügen:

def paused(): 
    while pause: 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       pygame.quit() 
       quit() 
      if event.type == pygame.K_p: 
       unpause() 
+0

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

+0

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

+0

Nein, aber ich werde versuchen zu sehen, was in diesem ausgewichenen Abschnitt vor sich geht. Ich werde dich wissen lassen, was ich finde – PiGuy

Verwandte Themen