On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение





Сообщение: 10
Зарегистрирован: 12.07.08
Откуда: Россия
Репутация: 0
ссылка на сообщение  Отправлено: 14.07.08 21:08. Заголовок: диалоговые окна


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

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 1 [только новые]







Сообщение: 14
Зарегистрирован: 23.10.07
Репутация: 0
ссылка на сообщение  Отправлено: 15.07.08 00:39. Заголовок: На самом деле твой в..


На самом деле твой вопрос очень емкий, но попробую немного объяснить на примере из wme_demo
Там есть такой перец - oldguy. Он реализован как entity и загружается в сцену room в скрипте scene_init.script принадлежащем сцене. В нем есть строка global OldGuy = Scene.LoadEntity("entities\oldguy\oldguy.entity");

Файл entities\oldguy\oldguy.entity описывает свойства этого чувака, в т.ч. там есть строка SCRIPT="entities\oldguy\oldguy.script". В этом скрипте реализован весь функционал олдгуя, в т.ч. и общение через диалоговое окно.

Рассмотрим этот файл.
Там есть обработчик событя "Talk". Это событие возникает, если клацнуть на кнопке диалога в меню, вызываемом правой кнопкой мыши. Если не понятно как это происходит, скажи, я объясню подробнее, чтобы сейчас не углубляться в дебри.
Так вот, когда к олдгую применили событие Talk, происходят какие-то манипуляции, но самое главное это:

 цитата:
// and let the dialogue begin
OldGuyDialogue();


OldGuyDialogue(); - это функция (подпрограмма) описанная далее за обработчиком события
Привожу ее текст полностью со своими коментариями


 цитата:
function OldGuyDialogue()
{
var Responses;
var Selected;

var Loop = true;

while(Loop) //Запускается цикл, в котором будет происходить диалог
{
// создается масив, набитый фразами
Responses[0] = "Who are you?";
Responses[1] = "What are you doing here?";
Responses[2] = "What can you tell me about the Wintermute Engine?";
Responses[3] = "I have to go.";

// Далее эти фразы добавляются в диалоговое окно. Каждая фраза имеет свой номер 0,1,2 или 3
Game.AddResponse(0, Responses[0]);
Game.AddResponse(1, Responses[1]);
Game.AddResponse(2, Responses[2]);
Game.AddResponse(3, Responses[3]);

// Определяется, на какую фразу нажал юзер
Selected = Game.GetResponse();

//Актер (Игровой персонаж!) произносит эту фразу
actor.Talk(Responses[Selected]);

// Определяется, что конкретно выбрал игрок и что с этим делать
if(Selected==0) //Если это фраза номер 0
{
this.Talk("My name's not important."); //то олдгуй чтото говорит
actor.Talk("Oh... OK"); //а персонаж игрока чтото отвечает
}
else if(Selected==1) this.Talk("I'm here to answer questions about the Wintermute Engine."); //Если это фраза номер 1, то олдгуй просто говорит
else if(Selected==2) //Если это фраза 2,
{
this.Talk("What would you like to know?"); // то олдгуй чтото говорит
// И начинает еще один диалог, номер 2, который функционирует точно также
OldGuyDialogue2();
}
else if(Selected==3) //Если это фраза номер три
{
this.Talk("OK, bye.");
Loop = false; // то олдгуй прощается и выполняется условие остановки цикла
}
}
}



А вообще в переводе мануала перечисленны все функции для работы с окном диалога. Найти можно в "Программирование в WME/Справочник по языку сценариев/Объект Game" в таблице методов ищи раздел "Диалоги/инвентарь"

Само окно диалогов можешь использовать по умолчанию или создать свое. Оно находится в interface\responses.def Можешь открыть его, внести bизменеия и пересохранить. Можешь создать с нуля. Запускаешь WindowEdit, File->New->Responses Box

В Project Managere в разделе Game Settings есть пункт Response window. Клацни на содержимом этого пункта (там будет по умолчанию interface\responses.def) и справа появятся три точки. Клацни на них сможешь выбрать новое окно в качестве диалогового. Файлы диалогового окна и окна инвентаря, в отличии от обычных окон заканчиваются не расширением .window, а .def

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 3
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет