Форум » Общие вопросы по WME » Помогите!!! в WME » Ответить

Помогите!!! в WME

molier: ПОМОГИТЕ: Как сделать, в WME чтобы при наведении предмета на объект, герой переходил в следующую сцену ( например: шаг 1 подходим к двери: дверь не открывается. шаг 2 Подносим ключ и мы переходим на другую сцену). Буду очень благодарен.

Ответов - 8

Dionysius: molier, на наведение мыши? Может, всё-таки по щелчку? Это и сделать проще. Достаточно обработать событие on "LeftClick"

molier: Dionysius, я примерно понимаю как но script выдаёт постаянно ошибку, и действие не происходит. Может поможешь со scriptом. Спосибо.

Pipec: Так по щелчку или при наведении? Если по щелчку, то "дверь" должна обрабатывать событие LeftClick on "LeftClick" { Game.ChangeScene("имя сцены"); } А если добавить еще строку actor.GoToObject(this); чтобы получилось on "LeftClick" { actor.GoToObject(this); Game.ChangeScene("имя сцены"); } то в игре с видом от третьего лица персонаж сначала подойдет к двери, а потом будет переход в новую сцену


Dionysius: molier, учись задавать вопросы. Правильно заданный вопрос - это уже половина ответа. Pipec тебе написал скрипт. Но ошибка у тебя может вылазить по самым разным причинам. Если всё равно не получается, то приведи здесь текст ошибки, а также текст скрипта, в котором ошибка.

molier: on "LeftClick" { actor.GoToObject(this); actor.Talk("Дверь закрыта"); } .............................................. on "LookAt" { actor.GoToObject(this); actor.Talk("Надо искать ключ"); } on "Take" { actor.GoToObject(this); actor.Talk("Закрыто"); } on "Talk" { actor.GoToObject(this); actor.Talk("Закрыто"); } ................................................ А вот что написать сдесь Чтобы при наведении ключа (взятого в другой сцене Game.TakeItem("kluc");) Герое перешёл на другую сцену (kom_2.scene)? Код сцены kom_2.scene ниже работает. .................................................. on "" { actor.GoToObject(this); Game.ChangeScene("scenes\kom_2\kom_2.scene"); } ........................................................

Dionysius: on "kluc"

molier: Большое спосибо, огазывается всё гениальное - просто. Но одно но, как теперь избавится от это ключа из инвенторя. И (?) можно ли один и тотже предмет переложить с одного места в другие так, чтобы это действие повлияло на саму сцену (предположим: берём стички, подносим к газете, газета горит) ????

Pipec: Но одно но, как теперь избавится от это ключа из инвенторя Цитата из переведенного манула по WME Удаление из инвентаря осуществляется методом Game.DropItem(): Game.DropItem("book"); Хотя удалённый предмет больше не отображается в инвентаре, тем не менее он может быть снова использован впоследствии. Если Вы хотите удалить эту вещь из игры навсегда, воспользуйтесь методом Game.DeleteItem(). И (?) можно ли один и тотже предмет переложить с одного места в другие так, чтобы это действие повлияло на саму сцену (предположим: берём стички, подносим к газете, газета горит) ???? Газета должна обрабатывать событе "спичка". (on "spichka" например) А дальше решай сам, как удобнее сделать газету горящей (в пределах обработчика события). Есть 2 способа: 1. Замена спрайта. var tmp; создается временная переменная tmp = Scene.GetNode(this); в эту переменную сохраняется ссылка на объект "газета" tmp.SetSprite("путь к спрайту, содержащему анимированное изображение горящей газеты"); 2. Активизация скрытого изображения (более фэн-шуйный вариант) В SceneEditor'е создаешь сразу два объекта - негорящую и горящую газету. Они будут располагаться в одном месте друг над другом. Допустим обычная газета будет называться gazeta, а горящая - gorgazeta. В перечне объектов сцены в SceneEditor'е снимаешь птичку напротив объекта gorgazeta. Теперь он не отображается в сцене, но присутствует в ней. Теперь обрабатываем событие spichka в негорящей газете on "spichka" { var tmp1; var tmp2; tmp1 = Scene.GetNode("gazeta"); tmp2 = Scene.GetNode("gorgazeta"); tmp2.Active = true; tmp1.Active = false; } Здесь мы получили ссылки на два объекта сцены, сделали видимым горящую газету и спрятали обычную. Этот способ лучше еще тем, что не подтормаживает игру. Например, если у тебя в сцене есть часы, которые тикают, причем звук тканья привязан к спрайту часов, то при использовании первого варианта будет отчетлво слышен сбой ритма. Если есть желание, можешь еще посмотреть скрипты drawer.script и open_drawer.script из wme_demo. В этих скриптах по этому же принципу реализовано открывание и закрывание выдвижного ящика стола. Если же тебе надо совместить два объекта инвентаря - спичку и газету и получить горящую газету, нужно делать так, как сделано в скрипте game.script в wme_demo: В этом скрипте происходит глобальная обработка события LeftClick on "LeftClick" { var ActObj = Game.ActiveObject; Получаем ссылку на объект, над который щелкнули мышкой if(ActObj!=null) Если не щелкнули в пустом месте { if(ActObj.Type=="item" && Game.SelectedItem==null) смотри не щелкнули ли на предмете инвентаря { Game.SelectedItem = ActObj; если щелкнули и при этом еще ни один предмет из инвентаря не выбран, то выбираем объект } else if(Game.SelectedItem != null && Game.SelectedItem!=ActObj) иначе, если предмет из инвентаря уже выбран и щелкнули на другом предмете инвентаря { var Item = Game.SelectedItem; проверяем, может ли вновь выбранный предмет взаимодействовать с предыдущим if(ActObj.CanHandleEvent(Item.Name)) ActObj.ApplyEvent(Item.Name); если да, то совмещаем предметы else actor.Talk("I can't use these things together."); иначе, говорим что предметы не совместимы } } } Если ты хочешь, чтобы гзета загоралась как при совмещении спички и газеты, так и при совмещении газеты и спички, то газета должна обрабатывать событие от спички, а спичка событие от газеты. А для отображения горящей газеты в инвентаре нужно просто убрать от туда программно и газету и спичку, а добавить горящую газету.



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