2012-06-04 3 views
1

Я выполнил поиск по Google и просмотрел через две мои книги для начинающих python, чтобы найти, как это сделать. Я предполагаю, что это должна быть простая задача. В принципе, я работаю с pygame с python.изменить изображение на основе щелчка в pygame

Я хочу, чтобы, если я нажму кнопку button_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() 
+1

Я не особо знаком с Pygame, но мне кажется, что вы просто хотите установить 'button1' изображение в' button1select_image' на события наведения мыши –

+1

Я добавил комментарий раньше, но я забыл, что вам нужно будет обрабатывать события, чтобы получить щелчки мыши. Взгляните на [это введение в события мыши в pygame] (http://lorenzod8n.wordpress.com/2007/05/30/pygame-tutorial-3-mouse-events/). Имейте в виду, что автор использует ['pygame.event.poll'] (http://www.pygame.org/docs/ref/event.html#pygame.event.poll) для вводных целей, но вы будете использовать ['pygame.event.get'] (http://www.pygame.org/docs/ref/event.html#pygame.event.get) в игре. – Devourant

+0

Я посмотрю. Спасибо. – Steven

ответ

4

Здесь я взбивал это, чтобы показать, как работает мышь. Линия 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, если переменная button1 или button2, соответственно, равна True. Остальное будет, если ни один из них не выбран, поэтому у вас есть оба изображения в качестве невыделенной кнопки. Если вы не знаете, как использовать изображения и тому подобное, посмотрите здесь: http://www.pygame.org/docs/ Это действительно помогло мне. Попробуйте сам, и если вы все еще застряли Stack биржа еще будет здесь вопросы :)

Надеется, что это помогает

+0

Большое спасибо. Мой вопрос: как показать изображение в этом коде? Я, очевидно, должен изучить это и узнать, что делается. – Steven

+0

На печатных заявлениях внизу. Просто используйте выбранное изображение для кнопок 1 или 2, если переменная button1 или button2, соответственно, 'True'. Остальное будет, если ни один из них не выбран, поэтому у вас есть оба изображения в качестве невыделенной кнопки. Если вы не знаете, как использовать изображения и тому подобное, посмотрите здесь: http://www.pygame.org/docs/ Это действительно помогло мне. Попробуйте сами, и если вы все еще застряли, Stack Exchange по-прежнему будет здесь для ваших вопросов :) – hammythepig

+0

Спасибо! Как только я получу время, я обязательно проверю это! :) – Steven

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 
    ... 
+0

Большое спасибо.К сожалению, я точно не следую. Есть ли учебник, который вы рекомендуете для python 3.1, pygame 1.9, который демонстрирует, что происходит? Я новичок в питоне. – Steven

0

Взгляни на это пример меню: https://stackoverflow.com/a/10747990/341744 конкретно в его коде: https://gist.github.com/2802185

Это создает класс Option, который меняет цвет при наведении курсора мыши. Вы можете расширить его, поэтому нажмите кнопку, кнопка вызывает функцию. (То есть: new_game(), show_options() и т.д.)

Смежные вопросы