Форум » Общие вопросы по WME » Смена клавишы вызова инвентаря » Ответить

Смена клавишы вызова инвентаря

Sid-pank: Как поставить определенную клавишу для вызова инвентаря ну например левый клик?

Ответов - 8

Dionysius: Обрабатывать событие в скрипте onClick или onKeyPress, где вызывать окошко инвентаря.

Sid-pank: Поподробней пожалуйста

Dionysius: Ну ты умеешь в скриптах обрабатывать нажатия кнопок? Вот и нужно для появления инвентаря обработать требуемое событие. Без программирования тут не обойтись. Загляни в папку проекта wme_demo_3d/data/scripts. Открой скрипт game.script Это главный сценарий игры. Найди там строку on "LeftClick". Это обработчик нажатия левой кнопки мыши. Весь код, заключённый в этом блоке в фигурные скобки, будет выполняться по левому клику мышью. Вот тут и надо написать код, отвечающий за вызов инвентаря. Хотя, пожалуй, будет более правильным написать этот код в файле scene.script, который является общим для всех сцен.


Pipec: Если я не прав, поравьте. Во всех демо сценах инвентарь выезжает, если подвести курсор к верхней части экрана. Исследуя скрипты, я не нашел нигде строк, которые загружали бы окно инвентаря в игру, как новый объект. Вместо этого в Project Managere в разделе Game setting можно указать, какое окно использовать в качестве Inventory window. Но здесь можно указывать только файлы-описания с расширением def. В игре же окно можно загружать окна методом LoadWindow только используя файлы-описания с расширениеv window. Соответственно нельзя загрузить окно методом LoadWindow из файла-описания def, и нельзя указать в Game Setting окно из файла-описания window. Создать окно инвентаря любого вида можно утилитой WindowEdit. Но эта утилита сохраняет окно в файл с расширением def. Такое окно загружается в игру, если на него сослаться в разделе Game Setting. Окно инвентаря можно создать "руками" в блокноте и сохранить с расширением window. Такое окно можно загружать в игру методом LoadWindow. В WME есть ряд методов для работы с инвентарем - добавить/удалить объект, скроллинг объектов в окне. Но эти методы работают для окна, которое загружено через Game Setting. Но для такого окна нельзя обратаывать события. Получается, чтобы воспользоваться методами, предоставляемыми WME нужно смириться с тем, что окно инвентаря будет всегда выезжать, если подвести мышь к верхней кромке экрана. Для того, чобы вызывать окно инвентаря другим способом (например нажатием правой клавиши мыши или какой-нибудь кнопкой на клавиатуре) нужно окно инвентаря загружать как обычное окно и разрабатывать самому весь инструментарий для управления инвентарем?

Pipec: Поправлю сам себя :) Окно инвентаря - объект особенный. Соответственно и открывать/закрывать его нужно по особенному, а именно спомощью команд Game.InventoryVisible = true/false. Извините, что нафлудил в предыдущем посте, я только начинаю осваивать WME и не заметил в файле game_loop.script таких строк // display the inventory window if(Game.Interactive && Game.MouseY < 45 && !Game.ResponsesVisible && !WinMenu.Visible) Game.InventoryVisible = true; else if(Game.MouseY > 100 || Game.ResponsesVisible || !Game.Interactive) Game.InventoryVisible = false;

Dionysius: Да, инвентарь - особое окно. Мне тоже ещё предстоит его переделать. Инвентарь загружается следующим образом (скрипт game_loop.script) var InvWindow = Game.GetInventoryWindow();

Dionysius: Хочу поправить свою ошибку. Строка var InvWindow = Game.GetInventoryWindow(); не загружает инвентарь, а возвращает ссылку на уже загруженный объект "Инвентарь".

Pipec: Вот как я реализовал открытие/закрытие окна инвентаря по правому клику. Эти строки прописываются в файле game.script. Соответственно из файла game_loop.script нужно убрать строки, описывающие работу окна инвентаря, которые я привел в конце своего поста за 23.10.07 (если вы делаете игру на основе шаблонов). on "RightClick" { var invwindow = Game.GetInventoryWindow(); //Получить дескриптор окна инвентаря if(Game.InventoryVisible) //Если окно открыто, { invwindow.Close(); //Выключить монопольный режим для окна инвентаря Game.InventoryVisible=false; //Закрыть окно } else //Иначе { Game.InventoryVisible = true; //Делаем окно инвентаря видимым invwindow.GoExclusive(); //Включаем монопольный режим для окна инвентаря } }



полная версия страницы