2016-03-29 15 views
0
#Imported Pygame 
import pygame 

#The Colors 
BLACK = (0, 0, 0) 
GREEN = (0, 255, 0) 
WHITE = (255, 255, 255) 
RED = (255, 0, 0) 
ORANGE = (255, 115, 0) 
YELLOW = (242, 255, 0) 
BROWN = (115, 87, 39) 
PURPLE = (298, 0, 247) 
GRAY = (168, 168, 168) 
PINK = (255, 0, 234) 
pygame.init() 
#The Screen 
screen = pygame.display.set_mode([1000,500]) 
#Name of the window 
pygame.display.set_caption("My first game") 

clock = pygame.time.Clock() 

#The sounds 

# Positions of graphics 
background_position = [0,0] 
singleplayer_position = [350, 200] 
tutorial_position = [350,300] 
sorry_position = [0,0] 
developer_position = [0,450] 
rules_position = [0,0] 
#The graphics 
background_image = pygame.image.load("Castle.png").convert() 
singleplayer_image = pygame.image.load("SinglePlayer.png").convert() 
singleplayer_image.set_colorkey(WHITE) 
tutorial_button = pygame.image.load("Tutorial_button.png").convert() 
sorry_message = pygame.image.load("Sorry.png").convert() 
sorry_message.set_colorkey(WHITE) 
developer_message = pygame.image.load("Developer.png").convert() 
developer_message.set_colorkey(WHITE) 
Rules_image = pygame.image.load("Rules.png").convert() 
#Main Loop __________________________ 

done = False 

while not done: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      done = True 
    # Copy of background or main menu 
    screen.blit(background_image, background_position) 

    #Copy of other images 
    mouse_pos = pygame.mouse.get_pos() 
    my_rect = pygame.Rect(350,200,393,75) 
    tutorial_rect = pygame.Rect(350,300,393,75) 
    screen.blit(singleplayer_image, singleplayer_position) 
    screen.blit(tutorial_button, tutorial_position) 
    screen.blit(developer_message, developer_position) 
    if pygame.mouse.get_pressed()[0] and my_rect.collidepoint(mouse_pos): 
     screen.blit(sorry_message, sorry_position) 
     correct = False 
    if pygame.mouse.get_pressed()[0] and my_rect.collidepoint(mouse_pos): 
      #Here I make the screen fill white 


    if python.mouse.get_pressed()[0]tutorial_rect.collidepoint(mouse.pos): 
     correct = True 
    if correct == True: 
     screen.blit(Rules_image, rules_position) 





    pygame.display.flip() 
    clock.tick(60) 
#To quit game 
pygame.quit() 

これは基本的に私のコードです...私がシングルプレーヤーのボタンを押したとき、私はそれを白くしていますが、そこにはいません。私が一度ヒットしてシングルプレイヤーのボタンを押したときのように、それは白のままですが、私が画面を元に戻したときと同じです。とにかく、以前にやったことのあるものをすべて消去して、シングルプレイヤーボタンを押すと新しい画面を開くことはできますか?ボタンで画面を消去する

あなたが私に与えた答えに戻る。 私はあなたのように私のコードを構造化しました。

if pygame.mouse.get_pressed()[0] and my_rect.collidepoint(mouse_pos): 
      color_white = True 
      if color_white = True 
      screen.fill(WHITE) 

これはまだ画面が白くならないため動作しません。 私はこれを試しました。

if pygame.mouse.get_pressed()[0] and my_rect.collidepoint(mouse_pos): 
    color_white = True 
if color_white = True 
    screen.fill(WHITE) 

これは、color_whiteが未定義であると言うことを継続するため、これも動作していないようです。

+0

あなたのコードでは、 'tutorial_rect.collidepoint(mouse_pos)で壊れなります' –

+0

ああtutorial_rectがここにコードを印刷する際に、単にエラーです。実際の画面ではインデントされています。 – HALLOPEOPLE

+0

あなたの質問を編集してみませんか?結腸は何ですか? –

答えて

1

あなたの混乱はwhileループとその動作の結果であるため、あなたの質問に答えるために説明します。

クイックノート:あなたはこれを行う、コードの末尾にダニとpygameのクロックオブジェクトを使ってコメントし、私は最後にそれを説明しましょう、その重要されていない場合(http://www.pygame.org/docs/ref/time.html

さて、問題。 :画像をクリックした後に白く残りません。マウスを下に置くと白いままですが、持ち上げると消えます。私はあなたがマウスのクリックを持ち上げてもそれが白のままであることを望むと仮定します。

現在、あなたのコードは、絵をif文の内側に色付けします。

if pygame.mouse.get_pressed()[0] and my_rect.collidepoint(mouse_pos): 

.get_pressed()の機能を確認してください。マウスボタンを押すとTrueを返します。それをクリックするとTrueと表示されます。クリックしたり押さなかったりすると、その偽です。マウスがクリックされたり押されたりすると、その色は白になります。それが正常に戻るのはループの早い段階です。各ループ、pygameは、blitを介してイメージを通常にし、文がTrueに評価された場合には白を塗りつぶします。これは、if文がFalseの場合はいつでも、ピクチャは正常なままであることを意味します。

白く塗られたままにするには、ブール値を使用します。

if pygame.mouse.get_pressed()[0] and my_rect.collidepoint(mouse_pos): 
     color_white = True 

そして、代わりに今、trueにブール値を設定し、if文の内側に白を着色するコードを置くことのあなたのループが終了する前に、もし新しいステートメントを作ります。

if color_white: 
    # Code to make the screen white. 

このようにして、これを押さえていなくても白色のままにすることができます。別のクリックで元の状態に戻したい場合。最初のifステートメントを拡張することができます。

短い形式で符号化することができる
if pygame.mouse.get_pressed()[0] and my_rect.collidepoint(mouse_pos): 
     if color_white is True: 
      color_white = False 
     else: 
      color_white = True 

...

color_white = False if color_white == True else True 

編集:私はイベントを考慮し、以前のコードを書きました。このコードは、MOUSEBUTTONDOWNイベントを使用して色を変更していた場合に機能します。ただし、get_pressed()を使用する場合は、別のマウスボタンを使用する必要があります。左クリックだけを使用している場合は、ループが頻繁に繰り返されるため、プログラムをオフにするかオフにするかをプログラムはどのように知るべきですか?

get_pressedを念頭に置いてコードを書き直します。

Edit2:あなたのcolor_whiteは定義されていません。これはコード内のif文の後に定義されるためです。だから前にクリックする機会を得る(とそれを定義する)、ループの実行をして

if color_white: 

になりますが、まだコンピュータにcolor_white存在しません。解決するには、whileループの前にcolor_whiteを定義します。

color_white = False # Default to not color the screen white. 
+0

'color_white'が' True'と等しいのはなぜチェックしますか?あなたは '== True'を削除することができます。 –

+1

わかりやすくするために書きましたが、正しいですが、本当に== Trueの必要はありません。 –

+0

動作しません...私はcolor_white = Trueを作成し、次にif文を作成しました.color_whiteがtrueの場合、画面は白でなければなりません。しかし、まだ画像/ボタンをクリックすると、画面は白くなりますが、リリースすると元の画像に戻ります。 – HALLOPEOPLE

関連する問題