Как заставить текст двигаться непрерывно, нажимая кнопку на CodeSkulptor (Python)? - PullRequest
0 голосов
/ 10 февраля 2019

Я пытаюсь заставить текст двигаться непрерывно, нажимая кнопку, но сейчас он перемещает интервал только при каждом нажатии.

def move():
    global y
    global checkmove
    checkmove = True
    if y > 280:
        y = 0
    else:
        y += 2

1 Ответ

0 голосов
/ 22 марта 2019

Нет встроенного способа узнать, удерживается ли кнопка нажатой.Тем не менее, есть обработчик button_up, а также обработчик button_down.Если вы используете таймеры, вы можете сказать, как долго удерживалась клавиша.Вот пример кода, который может сказать, какие клавиши удерживаются.Несколько клавиш можно удерживать одновременно.Если вы хотите изменить время, вы можете изменить длину таймеров в нижней части кода.Изменение значения таймера 1 изменит время удержания клавиши до имитации нажатий клавиш, изменение длины таймера 2 изменит скорость нажатия клавиш после их удержания.Вы также можете увидеть код здесь: https://py3.codeskulptor.org/#user303_gtJ15kIGNV_0.py

def timer_handler():
    #start timer 2 if it is off
    if not timer_on:
        timer2.start()
    #stop timer 1
    timer.stop()

def timer2_handler():
    #simulates repeated keypresses if the key is held down
    global timer_on
    timer_on=True
    if len(held_keys)==0:
        timer2.stop()
        timer_on=False
    else:
        for item in held_keys:
            action(item)

def action(key):
    #this is where all the code to make something happen goes
    if key==upkey:
        #do something
        print('up key pressed')
    elif key==downkey:
        #do something else
        print('down key pressed')

def key_handler(key):
    #handles user keypresses
    #add key to held keys
    global held_keys
    held_keys.append(key)
    #do something with key
    action(key)
    #start timer 1 if timer 2 is off
    if not timer_on:
        timer.start()

def release_handler(key):
    #handles key releases
    #remove the key from the list
    global held_keys
    if key in held_keys:
        held_keys.remove(key)
    #if no keys are held, stop both timers
    global timer_on
    if len(held_keys)==0:
        timer.stop()
        timer2.stop()
        timer_on=False

import simplegui

timer_on=False
held_keys=[]

#starts timer 2
timer = simplegui.create_timer(300, timer_handler)
#automatic keypress
timer2 = simplegui.create_timer(100, timer2_handler)

#map whatever keys you need
spacekey=simplegui.KEY_MAP['space']
leftkey=simplegui.KEY_MAP['left']
rightkey=simplegui.KEY_MAP['right']
upkey=simplegui.KEY_MAP['up']
downkey=simplegui.KEY_MAP['down']

#create a frame and set key down/up handlers
frame=simplegui.create_frame('Click the box, then use arrow keys to move', 100, 100)
frame.set_keydown_handler(key_handler)
frame.set_keyup_handler(release_handler)
frame.start()
...