init -2 python: items = [] # пустой список last_item = None # пустой последний нажатый пункт # регистрируем канал для списка, # чтобы он не выключал звуки из игры: renpy.music.register_channel("itms", "sfx", False) # здесь может быть любой обработчик нажатия кнопки из списка def SelectItemF(index): # сюда ставить код обработчика на питоне # например, удалим пункт из списка и запомним его значение if (index >= 0) and (index < len(items)): last_item = items.pop(index) # а если не хотим удалять нажатый пункт: # last_item = items[index] # теперь добавим звук нажатия на пункт списка: renpy.play("sounds/buy.mp3", channel="itms") # а это чтобы перерисовать/обновить экраны: renpy.restart_interaction() # превращаем функцию в action SelectItem = renpy.curry(SelectItemF) # получить имя файла def GetFN(index=0): global items if (index >= 0) and (index < len(items)): fn, hn = items[index] return "inventory/" + fn + ".png" else: return "" # получить подсказку def GetHint(index=0): global items if (index >= 0) and (index < len(items)): fn, hn = items[index] return hn else: return "" init: image bg world1 = "bg_world1.png" image mario = "mario.png" $ invent = False screen inventory: zorder 111 default tt = Tooltip(" ") frame: xalign 1.0 background Solid("#0000") xmaximum 130 ymaximum 450 xfill True vbox: imagebutton auto "inventory/bag_%s.png" action SetVariable("invent", not invent) if invent: text tt.value hbox: viewport id "box": yinitial 9999 xmaximum 0.9 mousewheel True draggable True vbox: for i in range(0, len(items)): imagebutton: idle Image(GetFN(i)) hover Image(GetFN(i)) hovered tt.Action(GetHint(i)) # действие при нажатии на пункт: action SelectItem(i) vbar yfill True value YScrollValue("box") label start: scene black # начальные значения для списка $ last_item = None $ items = [("coin", "Денюжка"), ("flower", "Цветочег"), ("goomba", "Гумба")] # экран со списком: show screen inventory scene bg world1 show mario with dissolve "Нажми на чемоданчик. Затем жми на экран." # добавление пунктов в список: $ items.extend([("mushroom", "Грыбок"), ("plant", "Сорняк"), ("star", "Пёздочка")]) "В инвентарь добавлено три предмета." return # чтобы узнать из любого места последний нажатый пункт: # if last_item != None: # fn, hn = last_item # в fn будет имя файла картинки, # в hn - имя пункта, подсказка # после чего переменную по желанию можно обнулить # last_item = None
Комментарии
А есть ли возможность реализовать вывод контекстного меню при наведении на элементы инвентаря?
ОтветитьУдалитьпоменял код. теперь можно совершать действия по клику (при нажатии элемента списка вызывается функция SelectItem в самом начале скрипта) и выводятся подсказки при наведении курсора. только первый элемент без подсказки всегда, но это уже косяк не мой, баг движка, походу.
Удалитьприкрутить подсказки к пунктам. вот описание подсказок:
ОтветитьУдалитьhttp://www.renpy.org/doc/html/screen_actions.html
Получается я сделал так,
ОтветитьУдалитьif SelectItem == "key":
jump start
и выдаёт ошибку 'int' object is not callable
Как int сделать вызываемой?
вы пытаетесь из скрипта вызвать функцию, которую вообще нельзя вызывать. она сама вызывается при нажатии кнопки. код ее обработчика и нужно создать вместо этого комментария «# сюда ставить код обработчика на питоне».
Удалитьselectaction - это действие (action) для нажатия кнопок, его нельзя использовать из скрипта.
если хочется кого-то куда-то послать по нажатию на ключик, то в этом самом обработчике после строки renpy.restart_interaction() следует добавить это:
if last_item[0] == "key":
renpy.jump("opendoor")
last_item = None # это чтобы не использовать удаленный из списка предмет дважды. использовали и забыли. из инвентаря одноразовый предмет тоже нужно удалять (командой pop)
День добрый. А каким образом объявляется обычный imagebutton? Например, для возврата на предыдущую сцену.
ОтветитьУдалитьimagebutton auto "btn_back_%s.png" focus_mask True action Rollback()
Удалитьв папке images должно быть минимум 2 файла:
btn_back_idle.png и btn_back_hover.png
и еще по теме:
1) http://pastebin.com/z7PAVMya
2) https://www.renpy.org/doc/html/style_properties.html
3) https://www.renpy.org/wiki/renpy/doc/tutorials/Style_Customization
Уже пробовал так. Получаю при запуске вот такое(
Удалитьhttp://www.imagebam.com/image/b53bc6492230134
Может эту кнопку нужно в ините как-то объявлять?
Удалитья не гугл и не дебагер, сорри. на вопросы по теме и не по теме уже ответил.
Удалитьконсультации есть в группе https://vk.com/renpy
Самый тупой вопрос: в какой папке это всё писать? В script, options или screen? Я вигачу ВН в renpy 6.16, и папки gui у меня нет.
ОтветитьУдалитьКод должен быть в script если не понятно скачайте проект в самом верху и переместите его в папку ren'py тогда вы сможете его запустить и посмотреть как всё сделанно
Удалить