2016-11-20 11 views
0

基本的には、ユーザーが新しいゲームをクリックしたときに空のテンプレートを作成しようとしていました。 whileループをキャンセルし、Background.fill()関数を使用して空白の画面を作成するようにコードに指示しますが、動作しません。ここに私のコードです。Pygameは新鮮な画面を作成します

import pygame 
import random 
import sys 
from pygame import * 

def text(): 
    font = pygame.font.SysFont("monospace", 40) 
    surfacefont = font.render("Tower Defense", True, black) 
    surfaceR = surfacefont.get_rect() 
    surfaceR.center = (400,50) 
    Background.blit(surfacefont, surfaceR) 

    text = font.render("Start game", True, black) 
    textpos = surfacefont.get_rect() 
    textpos.center = (425,200) 
    Background.blit(text, textpos) 

    text = font.render("Exit Game", True, black) 
    textpos = surfacefont.get_rect() 
    textpos.center = (435,260) 
    Background.blit(surfacefont, surfaceR) 
    Background.blit(text, textpos) 
    pygame.display.update() 

def button(): 
    click = pygame.mouse.get_pressed() 
    pos = pygame.mouse.get_pos() 
    if 285+205 > pos[0] > 285 and 175+50 > pos[1] > 175: 
     pygame.draw.rect(Background, (100,100,100),(263,175,250,50)) 
     if click[0] == 1: 
      cancelLoop() 
    else: 
     pygame.draw.rect(Background, white,(285,175,205,50)) 

    if 278+220 > pos[0] > 278 and 234+50 > pos[1] > 234: 
     pygame.draw.rect(Background, (100,100,100),(278,234,220,50)) 
     if click[0] == 1: 
      pygame.quit() 
      sys.exit() 
    else: 
     pygame.draw.rect(Background, white,(278,234,220,50)) 

def cancelLoop(): 
    global intro 
    intro = 0 
    runGame() 

def runGame(): 
    Background.fill(red) 

pygame.init() 

display_width = 800 
display_height = 600 

black = (0,0,0) 
white = (255,255,255) 
red = (255,0,0) 
Background = pygame.display.set_mode((display_width,display_height)) 
pygame.display.set_caption("Tower Defense") 
intro = 1 
while intro == 1: 
    Background.fill(white) 
    button() 
    text() 
    for event in pygame.event.get(): 
     if event.type == quit: 
      pygame.quit() 
      sys.exit() 
    pygame.display.update() 
    pygame.display.flip() 
+0

ようこそ、スタックオーバーフロー!デバッガの使い方を学ぶ必要があるようです。 [補完的なデバッグ手法](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)にご協力ください。その後も問題が残っている場合は、もう少し詳しくお聞かせください。 –

+0

「pygame.display.update()」または「pygame.display.flip()」のいずれかを使用するのは、基本的に同じことです。いずれかが動作しますが、 'update()'はソフトウェアディスプレイに最適化されているため、この場合には推奨されます。 –

答えて

0

問題は、あなたがintro == 0を呼び出すときに、あなたのwhileループをキャンセルするので、あなたが効果的に、あなたのゲームを終了していることです。その結果、プログラムはイントロ後に終了するだけです。ちょうどあなたのイントロのためにwhileループを作るのではなく、runGame()関数が呼び出される1つのメインループを作るか、イントロと実際のゲームに別々のループを作ることができます。 これは私が個人的に書く方法です:

import pygame 
import random 
import sys 
from pygame import * 

pygame.init() 

display_width = 800 
display_height = 600 

black = (0,0,0) 
white = (255,255,255) 
red = (255,0,0) 
Background = pygame.display.set_mode((display_width,display_height)) 
pygame.display.set_caption("Tower Defense") 

def text(): 
    font = pygame.font.SysFont("monospace", 40) 
    surfacefont = font.render("Tower Defense", True, black) 
    surfaceR = surfacefont.get_rect() 
    surfaceR.center = (400,50) 
    Background.blit(surfacefont, surfaceR) 

    text = font.render("Start game", True, black) 
    textpos = surfacefont.get_rect() 
    textpos.center = (425,200) 
    Background.blit(text, textpos) 

    text = font.render("Exit Game", True, black) 
    textpos = surfacefont.get_rect() 
    textpos.center = (435,260) 
    Background.blit(surfacefont, surfaceR) 
    Background.blit(text, textpos) 
    pygame.display.update() 

def button(): 
    click = pygame.mouse.get_pressed() 
    pos = pygame.mouse.get_pos() 
    if 285+205 > pos[0] > 285 and 175+50 > pos[1] > 175: 
     pygame.draw.rect(Background, (100,100,100),(263,175,250,50)) 
     if click[0] == 1: 
      runGame() 
    else: 
     pygame.draw.rect(Background, white,(285,175,205,50)) 

    if 278+220 > pos[0] > 278 and 234+50 > pos[1] > 234: 
     pygame.draw.rect(Background, (100,100,100),(278,234,220,50)) 
     if click[0] == 1: 
      pygame.quit() 
      sys.exit() 
    else: 
     pygame.draw.rect(Background, white,(278,234,220,50)) 

def runGame(): 
    Background.fill(red) 

intro = 1 
while intro == 1: 
    Background.fill(white) 
    button() 
    text() 
    for event in pygame.event.get(): 
     if event.type == quit: 
      pygame.quit() 
      sys.exit() 
    pygame.display.update() 
    pygame.display.flip() 
関連する問題