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 тогда вы сможете его запустить и посмотреть как всё сделанно
Удалить