我知道我可以检查有没有左键点击
event.type == pygame.MOUSEBUTTONDOWN and event.button == LEFT
但是我怎么检查他们是否双击了呢?另外,有没有办法检查用户是否向前或向后移动滚轮?
发布于 2012-03-29 12:05:08
我从未使用过pygame
-但是:
SCROLL_UP
或类似的东西,而不是LEFT
。请查阅文档,了解SCROLL_UP
的确切名称。
发布于 2017-03-09 18:02:16
我只是使用clock.tick
返回的增量时间值来增加计时器。在本例中,您有0.5秒的时间双击,否则将重置计时器。
import sys
import pygame as pg
pg.init()
screen = pg.display.set_mode((640, 480))
BLACK = pg.Color('black')
FONT = pg.font.Font(None, 32)
def game():
clock = pg.time.Clock()
timer = 0
dt = 0
running = True
while running:
for event in pg.event.get():
if event.type == pg.QUIT:
running = False
if event.type == pg.MOUSEBUTTONDOWN:
if event.button == 1:
if timer == 0: # First mouse click.
timer = 0.001 # Start the timer.
# Click again before 0.5 seconds to double click.
elif timer < 0.5:
print('double click')
timer = 0
# Increase timer after mouse was pressed the first time.
if timer != 0:
timer += dt
# Reset after 0.5 seconds.
if timer >= 0.5:
print('too late')
timer = 0
screen.fill(BLACK)
txt = FONT.render(str(round(timer, 2)), True, (180, 190, 40))
screen.blit(txt, (40, 40))
pg.display.flip()
# dt == time in seconds since last tick.
# / 1000 to convert milliseconds to seconds.
dt = clock.tick(30) / 1000
if __name__ == '__main__':
game()
pg.quit()
sys.exit()
发布于 2016-03-29 02:46:33
在第一次按下鼠标时设置计时器,将用户事件放到pygame事件队列中,并将变量设置为1以指示单击。当第二次单击发生时,检查变量并将timer事件对象设置为off。检查userevent是否出现在队列中,因为这意味着计时器已超时。有关更多信息,请参阅这个漂亮的答案:Move an object every few seconds in Pygame
以下是代码,将double_click()
调用替换为您自己的函数调用:
def run():
global clock, double_click_event, timer
double_click_event = pygame.USEREVENT + 1
timer = 0
while True:
clock.tick(60)
check_events()
frame.update()
screen.blit(frame, (0,0))
pygame.display.flip()
def check_events():
global dispatcher, double_click_event, timer
events = pygame.event.get()
for event in events:
if event.type == pygame.QUIT:
sys.exit()
if event.type == pygame.MOUSEBUTTONDOWN:
if timer == 0:
pygame.time.set_timer(double_click_event, 500)
timerset = True
else:
if timer == 1:
pygame.time.set_timer(double_click_event, 0)
double_click()
timerset =False
if timerset:
timer = 1
return
else:
timer = 0
return
elif event.type == double_click_event:
# timer timed out
pygame.time.set_timer(double_click_event, 0)
timer = 0
print "evt = dble click"
https://stackoverflow.com/questions/9918808
复制相似问题