Как получить кнопку Pygame, чтобы зарегистрировать только один клик?
2237 просмотра
2 ответа
Я делаю игру в Pygame с нажимаемой кнопкой, но я хочу, чтобы при нажатии она делала только одну вещь. Код ниже печатает «кнопка нажата» до тех пор, пока вы удерживаете ее нажатой. Какой элегантный способ изменить этот код, чтобы он печатался только один раз за клик?
import pygame
import sys
pygame.init()
screen = pygame.display.set_mode((640, 480),0,32)
clock = pygame.time.Clock()
def makeButton(x,y,width,height):
if x + width > cur[0] > x and y + height > cur[1] > y:
if click == (1,0,0):
print "button pressed"
square = pygame.Rect((0,0), (32,32))
while True:
cur = pygame.mouse.get_pos()
click = pygame.mouse.get_pressed()
makeButton(square.left,square.top,square.width,square.height)
screen.fill((255,255,255))
screen.fill((55,155,0), square)
pygame.display.update()
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
quit()
Автор: user3150635
Источник
Размещён: 12.11.2019 09:03
Ответы (2)
4 плюса
Простой и более эффективный способ сделать то, что вы хотите, - это явно проверять наличие pygame.MOUSEBUTTONDOWN
событий и выполнять обработку событий мыши только при необходимости. Вы также можете упростить логику makeButton()
с помощью Rect
класса pygame, который знает, как обнаруживать столкновения.
Вот что я имею в виду:
import pygame
import sys
pygame.init()
screen = pygame.display.set_mode((640, 480),0,32)
clock = pygame.time.Clock()
def makeButton(cur, rect):
if rect.collidepoint(cur):
print "button pressed"
square = pygame.Rect((0,0), (32,32))
while True:
screen.fill((255,255,255))
screen.fill((55,155,0), square)
pygame.display.update()
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
quit()
elif event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 1: # left mouse button?
makeButton(event.pos, square)
Автор: martineau
Размещён: 08.07.2015 07:15
0 плюса
Вместо того, чтобы просто иметь метод, я бы создал класс кнопки и создал его для каждой нужной кнопки. Вы также пытаетесь создать свою собственную обработку событий мыши, которая запускается каждый раз, когда выполняется игровой цикл, но в pygame лучше передавать информацию о мыши в такой объект кнопки только при событии мыши. Типы событий MOUSEBUTTONDOWN и MOUSEBUTTONUP будут передаваться в очередь событий при каждом щелчке. Чтобы создать описанное вами поведение, вы можете выполнить действие кнопки только в том случае, если мышь находится в пределах кнопки в событии MOUSEBUTTONUP. Эта страница обеспечивает хорошее введение в обращение ввода Pygame и эта страница содержит подробное (хотя и несколько передового) обсуждение создания общего класса кнопки в Pygame.
Автор: csunday95 Размещён: 08.07.2015 06:31Вопросы из категории :
- python Обработка XML в Python
- python Как я могу использовать Python itertools.groupby ()?
- python Python: На какой ОС я работаю?
- python Как я могу создать непосредственно исполняемое кроссплатформенное приложение с графическим интерфейсом на Python?
- python Вызов функции модуля с использованием его имени (строки)
- python Звук Питона («Колокол»)
- pygame Как сделать поверхность с прозрачным фоном в Pygame
- pygame Выполнение кода Python, содержащегося в строке
- pygame Как повернуть изображение вокруг его центра с помощью Pygame?
- pygame Как я могу случайным образом разместить несколько не сталкивающихся ритов?
- pygame Почему не загружаются мои изображения Pygame?
- pygame Как инвертировать цвета изображения в Pygame?
- mouseevent Задержка события jquery hover?
- mouseevent Консольное приложение Обнаружение / сравнение координат XY Mouse-Click XY
- mouseevent События мыши WPF WebBrowser не работают должным образом
- mouseevent Linux, как захватить экран и имитировать движения мыши
- mouseevent Идентифицировать компонент Swing по определенной экранной координате? (И отправка вручную MouseEvents)
- mouseevent Обнаружить щелчок левой и правой кнопкой мыши одновременно?