Python Roguelike: инвентарь исчезает

Сегодня я продвинулся дальше в этот учебник Python в стиле roguelike и дошел до инвентарь. Сейчас я могу собирать предметы и использовать их. Единственная проблема в том, что при доступе к инвентарю он виден только долю секунды, хотя я использовал функцию console_wait_for_keypress(True). Я не уверен, почему он исчезает. Вот код, отображающий меню (в данном случае инвентарь):

def menu(header,options,width):
    if len(options)>26: raise ValueError('Cannot have a menu with more than 26 options.')

    header_height=libtcod.console_get_height_rect(con,0,0,width,SCREEN_HEIGHT,header)
    height=len(options)+header_height

    window=libtcod.console_new(width,height)

    libtcod.console_set_default_foreground(window,libtcod.white)
    libtcod.console_print_rect_ex(window,0,0,width,height,libtcod.BKGND_NONE,libtcod.LEFT,header)

    y=header_height
    letter_index=ord('a')
    for option_text in options:
        text='('+chr(letter_index)+')'+option_text
        libtcod.console_print_ex(window,0,y,libtcod.BKGND_NONE,libtcod.LEFT,text)
        y+=1
        letter_index+=1

    x=SCREEN_WIDTH/2-width/2
    y=SCREEN_HEIGHT/2-height/2
    libtcod.console_blit(window,0,0,width,height,0,x,y,1.0,0.7)

    libtcod.console_flush()
    key=libtcod.console_wait_for_keypress(True)

    index=key.c-ord('a')
    if index>=0 and index<len(options): return index
    return None

Буду признателен за помощь или вклад в решение этой проблемы.


person Jeremy Darrach    schedule 09.03.2013    source источник
comment
Учебник python roguelike? Конкретный? Не думаю, что то, над чем вы работаете, так хорошо известно, как вы ожидаете.   -  person Karl Knechtel    schedule 09.03.2013
comment
Ах да, вчера я написал сообщение об этом руководстве ... вот ссылка на учебник: roguebasin.roguelikedevelopment.org/   -  person Jeremy Darrach    schedule 09.03.2013


Ответы (2)


Это может быть связано со старой версией библиотеки, у которой есть событие, когда вы нажимаете клавишу, и другое событие, когда вы отпускаете его. Таким образом, это может привести к тому, что он появится и исчезнет, ​​когда вы отпустите клавишу.

Поэтому попытайтесь увидеть, остается ли экран включенным, если вы держите клавишу нажатой.

person Abalieno    schedule 09.03.2013
comment
Когда я держу клавишу нажатой, экран инвентаря выскакивает, а затем очень быстро исчезает. Затем, когда я отпускаю ключ, экран инвентаря остается включенным (только после того, как вы удерживаете ключ в течение нескольких секунд). Для меня это настоящая загадка. - person Jeremy Darrach; 09.03.2013

wait_for_keypress действительно срабатывает как для пресс-релизов, так и для релизов. Чтобы исправить это, замените wait_for_keypress на sys_wait_for_event, указав, чтобы запускался только по событиям нажатия.

Documentation

person Keko    schedule 26.12.2013