2017-12-11 11 views
1

私はpygameでちょうど新しいです、これは私のコードです。私はメインボタンの機能を持っており、gameloop iiではインタラクティブなボタンを作成することに成功しています。私はgameloopのボタンを押して(「開始」)、私のgameDisplay 。ありがとうございます。 .............................................. .................................................. .................................................. .........Pygameボタンget.pressed()

import pygame,sys 


pygame.init() 
############# 
pygame.mixer.music.load('Invincible.mp3') 
pygame.mixer.music.play() 

############# 

display_width = 800 
display_height = 600 

black = (0,0,0) 
white = (255,255,255) 

red = (200,0,0) 
green = (0,200,0) 

bright_red = (255,0,0) 
bright_green = (0,255,0) 

block_color = (53,115,255) 


gameDisplay = pygame.display.set_mode((display_width,display_height)) 
pygame.display.set_caption('One Day After') 
clock = pygame.time.Clock() 

gameIcon = pygame.image.load('gameicon.jpg') 
pygame.display.set_icon(gameIcon) 

pause = False 

def text_objects(text, font): 
    textSurface = font.render(text, True, black) 
    return textSurface, textSurface.get_rect() 


def GameOver(): 
    #################################### 
    pygame.mixer.Sound.play("smb_gameover.wav") 
    pygame.mixer.music.stop() 
    #################################### 
    largeText = pygame.font.SysFont("comicsansms",115) 
    TextSurf, TextRect = text_objects("Game Over", largeText) 
    TextRect.center = ((display_width/2),(display_height/2)) 
    gameDisplay.blit(TextSurf, TextRect) 


    while True: 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       pygame.quit() 
       quit() 



     button("Play Again",150,450,100,50,green,bright_green,game_loop) 
     button("Quit",550,450,100,50,red,bright_red,quitgame) 

     pygame.display.update() 
     clock.tick(15) 

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: 
      pygame.mixer.music.stop() 
      action() 

    else: 
     pygame.draw.rect(gameDisplay, ic,(x,y,w,h)) 
    smallText = pygame.font.SysFont("comicsansms",20) 
    textSurf, textRect = text_objects(msg, smallText) 
    textRect.center = ((x+(w/2)), (y+(h/2))) 
    gameDisplay.blit(textSurf, textRect) 


def quitgame(): 
    pygame.quit() 
    sys.exit() 
    quit() 

def unpause(): 
    global pause 
    pygame.mixer.music.unpause() 
    pause = False 


def paused(): 
    ############ 
    pygame.mixer.music.pause() 
    ############# 
    largeText = pygame.font.SysFont("comicsansms",115) 
    TextSurf, TextRect = text_objects("Paused", largeText) 
    TextRect.center = ((display_width/2),(display_height/2)) 
    gameDisplay.blit(TextSurf, TextRect) 


    while pause: 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       pygame.quit() 
       quit() 


     button("Continue",150,450,100,50,green,bright_green,unpause) 
     button("Quit",550,450,100,50,red,bright_red,quitgame) 

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

     pilt1 = pygame.image.load('apoc2.jpg').convert() 
     gameDisplay.blit(pilt1, [0,0]) 
     pygame.display.flip() 


     button("Start",150,450,100,50,green,bright_green,game_loop) 
     button("Quit",550,450,100,50,red,bright_red,quitgame) 

     pygame.display.update() 

def game_loop(): 
    global pause 

    gameExit = False 

    while not gameExit: 

     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       pygame.quit() 
       sys.exit() 
       quit() 
     gameDisplay.fill(white) 
     gameDisplaypic = pygame.image.load('back.jpg').convert() 
     gameDisplay.blit(gameDisplaypic, [0,0]) 
     tekst = "This game will go as far as you choose!" 
     meie_font = pygame.font.SysFont("Arial", 36) 
     teksti_pilt = meie_font.render(tekst, False, (50,50,155)) 
     gameDisplay.blit(teksti_pilt, (100, 250)) 
     tekst2 = "You are the smith of your destiny" 
     meie_font = pygame.font.SysFont("Arial", 36) 
     teksti_pilt = meie_font.render(tekst2, False, (50,50,155)) 
     gameDisplay.blit(teksti_pilt, (100, 400)) 
     button("Start playing",300,500,150,50,green,bright_green) 
     pygame.display.update() 









game_intro() 
game_loop() 
pygame.quit() 
quit() 
+0

「game_loop」のボタンを押すと別の機能を開始する必要があります。 'game_main_loop' - 次の' while'ループを使います。または、状態変数ieを使用する必要があります。表示する要素を制御する 'state_display_text = True/False'、' state_display_white_color = True/False'、そしてボタンを使ってこの変数を変更することができます。 – furas

+0

'button'関数のコードはどこにありますか?多くの人々がこの機能をここに掲載し続けており、しばしば問題を引き起こします。よりクリーンなボタンソリューションについては、この[answer](https://stackoverflow.com/a/47664205/6220679)を参照してください。 – skrx

+0

あなたは正確に何をしようとしているのかを明確にすることができますか?背景色を変えたり、あるシーンから別のシーンに切り替える(イントロシーンからメインゲームシーンへ)だけでいいですか? – skrx

答えて

1

あなたは、表示する要素を制御する状態変数(True/False)を使用することができますし、ボタンを使用して、これらのvariblesを変更することができます。例では

私は時に表示テキストと2つのボタンコントロールする

display_text = True 
    display_button_1 = True 
    display_button_2 = False 

を持っています。

最初のボタンの値を変更し、テキストと最初のボタンを非表示にし、2番目のボタンを表示します。

あなたのボタン機能は醜いです。get_buttons()を使用していますので、押されたボタンを押して1つのボタンを削除し、同じ場所に別のボタンを置くと2番目のボタンが自動的にクリックされます。これを修正するには、event.type == MOUSEBUTTONUP(@Hileaを提案する)を使用する必要があります。

import pygame 
import sys # every import in separated line 

# --- constants --- 

display_width = 800 
display_height = 600 

black = (0,0,0) 
white = (255,255,255) 

red = (200,0,0) 
green = (0,200,0) 

bright_red = (255,0,0) 
bright_green = (0,255,0) 

block_color = (53,115,255) 

# --- functions --- 

def text_objects(text, font): 
    textSurface = font.render(text, True, black) 
    return textSurface, textSurface.get_rect() 

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: 
      pygame.mixer.music.stop() 
      action() 

    else: 
     pygame.draw.rect(gameDisplay, ic,(x,y,w,h)) 
    smallText = pygame.font.SysFont("comicsansms",20) 
    textSurf, textRect = text_objects(msg, smallText) 
    textRect.center = ((x+(w/2)), (y+(h/2))) 
    gameDisplay.blit(textSurf, textRect) 

def quitgame(): 
    pygame.quit() 
    sys.exit() 
    quit() 

def hide_text(): 
    global display_text 
    global display_button_1 
    global display_button_2 

    display_text = False 
    display_button_1 = False 
    display_button_2 = True 

def game_loop(): 
    global display_text 
    global display_button_1 
    global display_button_2 

    gameExit = False 
    display_text = True 
    display_button_1 = True 
    display_button_2 = False 

    meie_font = pygame.font.SysFont("Arial", 36) 

    tekst = "This game will go as far as you choose!" 
    teksti_pilt = meie_font.render(tekst, False, (50,50,155)) 

    tekst2 = "You are the smith of your destiny" 
    teksti_pilt = meie_font.render(tekst2, False, (50,50,155)) 

    while not gameExit: 

     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       return 

     gameDisplay.fill(white) 

     if display_text: 
      gameDisplay.blit(teksti_pilt, (100, 250)) 
      gameDisplay.blit(teksti_pilt, (100, 400)) 

     if display_button_1: 
      button("Start playing", 300,500,150,50,green,bright_green, hide_text) 

     if display_button_2: 
      button("Exit", 300,100,150,50,green,bright_green, pygame.quit) 

     pygame.display.update() 

# --- main --- 

pygame.init() 

gameDisplay = pygame.display.set_mode((display_width,display_height)) 
pygame.display.set_caption('One Day After') 

clock = pygame.time.Clock() 

pause = False 

game_loop() 
pygame.quit() 
2

私はpygameのダウンロードとuのようなスターターだが、(2日前に開始した)ので、申し訳ありませんが、これは十分な答えではない場合、私はそれに役立つことを願っています。

import pygame,sys 
from pygame.locals import * 

pygame.init() 
screen = pygame.display.set_mode((400,400)) 
white=(255,255,255) 
blue=(0,0,255) 
bright_red = (255,0,0) 
red = (200,0,0) 
black=(0,0,0) 
color=white 

def changecolor(newcolor): 
    global color 
    color=newcolor 

while True: 
    screen.fill(color) 

    for event in pygame.event.get(): 
     if event.type == QUIT: 
      pygame.quit() 
      sys.exit() 
     elif event.type == MOUSEBUTTONUP: 
      # Whenever somebody clicks on the screen the color 
      # will change from the initial color to the color 
      # value you send to the function. Using this you could 
      # make it specifically for your button. Like calling 
      # the change color function whenever the button is clicked. 
      changecolor(blue) 

    pygame.display.update()