Отправлено: 20.08.08 09:57. Заголовок: Помогите!!! в WME
ПОМОГИТЕ: Как сделать, в WME чтобы при наведении предмета на объект, герой переходил в следующую сцену ( например: шаг 1 подходим к двери: дверь не открывается. шаг 2 Подносим ключ и мы переходим на другую сцену). Буду очень благодарен.
molier, учись задавать вопросы. Правильно заданный вопрос - это уже половина ответа. Pipec тебе написал скрипт. Но ошибка у тебя может вылазить по самым разным причинам. Если всё равно не получается, то приведи здесь текст ошибки, а также текст скрипта, в котором ошибка.
Отправлено: 21.08.08 12:26. Заголовок: on "LeftClick..
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);
Отправлено: 21.08.08 20:49. Заголовок: :sm36: Большое спос..
Большое спосибо, огазывается всё гениальное - просто. Но одно но, как теперь избавится от это ключа из инвенторя. И (?) можно ли один и тотже предмет переложить с одного места в другие так, чтобы это действие повлияло на саму сцену (предположим: берём стички, подносим к газете, газета горит) ????
Отправлено: 22.08.08 00:01. Заголовок: Но одно но, как тепе..
цитата:
Но одно но, как теперь избавится от это ключа из инвенторя
Цитата из переведенного манула по 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."); иначе, говорим что предметы не совместимы
}
} }
Если ты хочешь, чтобы гзета загоралась как при совмещении спички и газеты, так и при совмещении газеты и спички, то газета должна обрабатывать событие от спички, а спичка событие от газеты. А для отображения горящей газеты в инвентаре нужно просто убрать от туда программно и газету и спичку, а добавить горящую газету.
Все даты в формате GMT
3 час. Хитов сегодня: 0
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет