1

私はグーグル検索を行い、これを行う方法を見つけるために2冊のPython初心者向けの本を検索しました。それは簡単な作業でなければならないと思います。基本的に、私はpythonでpygameを扱っています。

button1_image をクリックすると、button1select_image に変わりますよね?また、button2_image をクリックすると、button1select_image が button1_image に設定され、button2_image が button2select_image に変更されます。

だから私が疑問に思っているのは、それが単純な if else ステートメントなのか、それとももっと複雑なのかということです。明らかに、ボタンは後で別のことを行いますが、ユーザーのマウスのクリックに基づいてこのようなことを行う方法に関するチュートリアルが見つかりません。

# Button Mouse Click Image Change
# Demonstrates changing from one button image to another based on click of mouse.

from livewires import games, color

games.init(screen_width = 281, screen_height = 500, fps = 50)

button1_image = games.load_image("button1.png", transparent = False)
button1 = games.Sprite(image = button1_image, x = 28,y = 18)
games.screen.add(button1)

button1select_image = games.load_image("button1select.png", transparent = False)
button1select = games.Sprite(image = button1select_image, x = 28,y = 18)
games.screen.add(button1select)

button2_image = games.load_image("button2.png", transparent = False)
button2 = games.Sprite(image = button2_image, x = 56,y = 18)
games.screen.add(button2)

button2select_image = games.load_image("button2select.png", transparent = False)
button2select = games.Sprite(image = button2select_image, x = 56,y = 18)
games.screen.add(button2select)

games.screen.mainloop()
4

3 に答える 3

5

ここでは、マウスがどのように機能するかを示すためにこれを作りました。この行if event.button == 1:は、マウスの左ボタンが押されたかどうかをチェックします。マウスの右ボタンが必要な場合は、1 を 2 に変更します。

import pygame, sys
from pygame.locals import *

TIMER = 30
SCREEN_X = 200
SCREEN_Y = 200

screen = pygame.display.set_mode((SCREEN_X, SCREEN_Y))
clock = pygame.time.Clock() #tick-tock

ending = button1 = button2 = False

corner1 = (28,18)  #Top Left corner of button 1
corner2 = (56,18)  #Top Left corner of button 2

image_length = 100 #length of the buttons
image_height = 100 #height of the buttons

counter = 0

#Main Loop:
while ending==False:
    counter+=1
    clock.tick(TIMER)
    for event in pygame.event.get():
        if event.type == KEYDOWN:
            if event.key == K_ESCAPE:
                ending=True # Time to leave
                print("Game Stopped Early by user")
        elif event.type == MOUSEBUTTONDOWN:
            if event.button == 1:
                mouse_x, mouse_y = event.pos
                if (mouse_x >= corner1[0]) and (mouse_x <= corner1[0]+image_length) and (mouse_y >= corner1[1]) and (mouse_y <= corner1[1]+image_height):
                    print ("Button one is selected")
                    button1=True
                    button2=False
                elif (mouse_x >= corner2[0]) and (mouse_x <= corner2[0]+image_length) and (mouse_y >= corner2[1]) and (mouse_y <= corner2[1]+image_height):
                    print ("Button two is selected")
                    button1=False
                    button2=True
                else:
                    print ("That's not a button")
                    button1=False
                    button2=False
    if counter == TIMER:  #prints the statements once a second
        counter=0
        if button1==True:
            print ("Button one is currently selected")
        elif button2==True:
            print ("Button two is currently selected")
        else:
            print ("No buttons currently selected")

下部の印刷ステートメント。ボタン 1 またはボタン 2 変数がそれぞれTrue. それ以外の場合は、何も選択されていないため、両方の画像が選択されていないボタンとして表示されます。画像などの使い方がわからない場合は、こちらをご覧ください: http://www.pygame.org/docs/本当に助かりました。自分で試してみてください。それでも行き詰まっている場合は、Stack Exchange で質問を受け付けます:)

それが役に立てば幸い

于 2012-06-04T20:47:56.957 に答える
0

この例のメニューを見てください: https://stackoverflow.com/a/10747990/341744 特に彼のコード: https://gist.github.com/2802185

Optionマウスオーバーすると色が変わるクラスを作成します。それを拡張することができるので、クリックするとボタンが関数を呼び出します。(つまり:new_game()などshow_options())

于 2012-06-05T06:22:40.753 に答える
0

ここにいくつかの擬似コードがあります:

selected_button = None
buttons = [button1, button2]

...

for event in pygame.event.get():
  ...
  if event.type == MOUSEBUTTONDOWN:
      for b in buttons:
          if b.rect.collidepoint(event.pos):
              if selected_button == b:
                  # unselect this button
              else:
                  # unselect the old button (if there's one) and select this one
  ...
于 2012-06-04T22:15:22.700 に答える