Quest3D - Русскоязычное сообщество

Quest3D => Логика => Тема начата: cashis от 19 Апреля 2008, 11:29:06



Название: интерактивность
Отправлено: cashis от 19 Апреля 2008, 11:29:06
Как сделать что бы была кнопка при нажатии на неё она меняла координаты и менялись координаты другого объекта в моём случае двери. заранее СПС.


Название: Re: интерактивность
Отправлено: Strelets от 19 Апреля 2008, 13:36:23
Как сделать что бы была кнопка при нажатии на неё она меняла координаты и менялись координаты другого объекта в моём случае двери. заранее СПС.
Очень сложно написано, если я правильно тебя понял ты хочешь открываь и закрывать двери с помощью клавиши. Если да, то попробуй так. Открывание/Закрывание "F"


Название: Re: интерактивность
Отправлено: KBECT0MAH от 19 Апреля 2008, 14:06:44
Strelets, он хочет что бы модель кнопки смещалась имитируя нажатие и потом начиналось движение модели двери имитируя открытие  :D
Написал сложно, но надеюсь понятно  ;D


Название: Re: интерактивность
Отправлено: cashis от 19 Апреля 2008, 18:19:17
Как сделать что бы была кнопка при нажатии на неё она меняла координаты и менялись координаты другого объекта в моём случае двери. заранее СПС.
Очень сложно написано, если я правильно тебя понял ты хочешь открываь и закрывать двери с помощью клавиши. Если да, то попробуй так. Открывание/Закрывание "F"
Круто.Как это сделать а то у тебя там ничего не понять, там кучу часов надо распутывать. И вообще я не это хотел сделать.Я хотел чтобы нажав на кнопку в одной комнате открывлась дверь в другой комнате-ну это чтобы квесты делать.



И ктонибудь знает как сделать чтобы нажимая на кнопку приложение сворачивалось.


Название: Re: интерактивность
Отправлено: cashis от 19 Апреля 2008, 22:06:14
а есть ли в туториале про интерактивность если есть то где

и как в четвёртой версии называется нод отвечающий за наведение мышки на объект


Название: Re: интерактивность
Отправлено: Ovod от 21 Апреля 2008, 23:41:55
DetectMouseCollision


Название: Re: интерактивность
Отправлено: cashis от 23 Апреля 2008, 18:21:57
DetectMouseCollision
СПС большое а ты не знаешь как сделать что бы при наведении делалось так чтобы при нажатии кнопки чтонибудь происходило.


Название: Re: интерактивность
Отправлено: Ovod от 23 Апреля 2008, 22:54:02
Так вот, помнишь видеоуроки на официальном сайте - там в одном из них показывают, как сделать, чтобы при нажатии переключателя на стене заработал вентилятор. Я пока не учу Квест, мне некогда. Поэтому я все еще новичок в нем.


Название: Re: интерактивность
Отправлено: KBECT0MAH от 23 Апреля 2008, 23:27:18
Цитата: cashis
...
делалось так чтобы при нажатии кнопки чтонибудь происходило.

http://guest3d.wohlnet.ru/forum/index.php?topic=60.0 (http://guest3d.wohlnet.ru/forum/index.php?topic=60.0)


Название: Re: интерактивность
Отправлено: cashis от 25 Апреля 2008, 19:21:49
Цитата: cashis
...
делалось так чтобы при нажатии кнопки чтонибудь происходило.

http://guest3d.wohlnet.ru/forum/index.php?topic=60.0 (http://guest3d.wohlnet.ru/forum/index.php?topic=60.0)

ты сделал совсем не то что мне надо. мне надо чтобы я подошёл к кнопке нажал на неё и потом открылась дверь я кней подошёл и прошёл в дверной проём. А ты сделал через gui и у тебя они отображаются на мониторе ,а мне надо чтобы они были как предметы в мире.


Название: Re: интерактивность
Отправлено: KBECT0MAH от 25 Апреля 2008, 20:17:53
Цитата: cashis
ты сделал совсем не то что мне надо. мне надо чтобы я подошёл к кнопке нажал на неё и потом открылась дверь я кней подошёл и прошёл в дверной проём. А ты сделал через gui и у тебя они отображаются на мониторе ,а мне надо чтобы они были как предметы в мире.

А я и не собирался делать то, что тебе надо  :-*
Я дал тебе пример с кнопками, а твоя задача подумать и приспособить к своей идее.

Если ты хочешь получать готовые решения без прикладывания усилий, тогда жди...
Может кто нибудь бросит все свои дела и будет воплощать твои идеи   :D
и потом переделывать, если он сделает не совсем то или не так как ты хотел  ;D


Название: Re: интерактивность
Отправлено: cashis от 26 Апреля 2008, 10:09:42
Цитата: cashis
ты сделал совсем не то что мне надо. мне надо чтобы я подошёл к кнопке нажал на неё и потом открылась дверь я кней подошёл и прошёл в дверной проём. А ты сделал через gui и у тебя они отображаются на мониторе ,а мне надо чтобы они были как предметы в мире.

А я и не собирался делать то, что тебе надо  :-*
Я дал тебе пример с кнопками, а твоя задача подумать и приспособить к своей идее.

Если ты хочешь получать готовые решения без прикладывания усилий, тогда жди...
Может кто нибудь бросит все свои дела и будет воплощать твои идеи   :D
и потом переделывать, если он сделает не совсем то или не так как ты хотел  ;D
Не я не втом смысле я говорю что в моей ситуации gui не поможет.


Название: Re: интерактивность
Отправлено: KBECT0MAH от 26 Апреля 2008, 11:38:20
Цитата: cashis
Не я не втом смысле я говорю что в моей ситуации gui не поможет.

При чем тут GUI, я тебе дал пример где есть кнопки. Как ты просил:
"...чтобы при нажатии кнопки что нибудь происходило."
Не имеет значения где схема кнопки расположена у меня, можно взять и приспособить под свои объекты.
Если мой пример с несколькими кнопками не подходит, смотри в ...\Quest3D 3.6.6\Tutorials\2.7 - Graphic user interface\ схему Rotation Check Box

З.Ы.
Cashis, сколько тебе лет?


Название: Re: интерактивность
Отправлено: cashis от 26 Апреля 2008, 12:52:15
короче я сделал:у меня при наведении появляется check box нажимаешь на него и дверь открывается, но мне теперь надо что бы мышка(курсор) находилась прямо по центру(в любом разрешении) и чек бокс там же.
А ещё мне интересно как сделать так что бы при столкновении какого то объекта с камерой он исчезал и изменялся параметр.


Название: Re: интерактивность
Отправлено: cashis от 06 Мая 2008, 22:30:38
Я сделал короче кнопки в них окончательно разобрался, но у меня такая проблема я спокойно в своей игре могу нажать на кнопку сквозь стенку, как сделать так чтобы через стенку кнопки не нажимались,а нажимались только напрямую. ???


Название: Re: интерактивность
Отправлено: TiR от 11 Мая 2008, 19:45:42
добавь к кнопке get distance и сделай 2 условия с помощью expression - при вхождении в зону и нажатию кнопки срабатывает действие, т.е. откроется дверь..
вот только я пока не знаю как сделать, чтобы при нарушении условий дверь так и осталась открытой???))


Название: Re: интерактивность
Отправлено: KBECT0MAH от 11 Мая 2008, 20:09:46
добавь к кнопке get distance и сделай 2 условия с помощью expression - при вхождении в зону и нажатию кнопки срабатывает действие, т.е. откроется дверь..
вот только я пока не знаю как сделать, чтобы при нарушении условий дверь так и осталась открытой???))

Если делать через дистанцию, то с обратной стороны стены дистанция тоже будет просчитываться ;)
Можно сделать через CollisionRayCheck, поставив невидимый бокс перед кнопкой.
Пример в теме про "аквапаркные трубы" - http://guest3d.wohlnet.ru/forum/index.php?topic=173.0 (http://guest3d.wohlnet.ru/forum/index.php?topic=173.0)

Что бы дверь оставалась открытой, надо подключать через Trigger.
.


Название: Re: интерактивность
Отправлено: TiR от 11 Мая 2008, 22:55:45
что-то я не соображу к чему триггер подключать и какие там настройки делать :-[
как там сейчас сделано - так при нажатии дверь не открывается, а дергается, если убрать триггер, то все норм, вот только дверь после нажатия кнопки возле нее становится автоматической до того времени, пока еще раз не нажать кнопку  ::)
подскажите, плиз, что-то я уже ничего не соображаю...


Название: Re: интерактивность
Отправлено: cashis от 12 Мая 2008, 18:51:59
Я сделал чтобы при выполнении трёх условий кнопка нажималась:
1.Detect mouse collision
2.user input(mouse click)
3.value operator(get distanse(vector,vector)) EXPRESSION:A<1
и всё и терь только находясь рядом с ней по ней можно кликать.

Но больше всего меня волнует один вопрос который я задавал неоднократно и так и не получил ответ:
Как сделать так чтобы курсор мыши находился всегда точно в центре экрана(этот способ удобен и используется во всех экшенах)?


Название: Re: интерактивность
Отправлено: cashis от 16 Мая 2008, 15:52:16
АУУУУ КТО ЗНАЕТ КАК ЗАБИТЬ ПОЗИЦИЮ КУРСОРА И ЧТОБ ОН НЕ ДВИГАЛСЯ


Название: Re: интерактивность
Отправлено: mistud от 16 Мая 2008, 19:14:00
Прикрути этот If к Start 3D Scene
Комментарий: работает только в полноэкранном режиме.


Название: Re: интерактивность
Отправлено: cashis от 17 Мая 2008, 12:21:29
ОГРОМНОЕ ТЕБЕ СПАСИБО


Название: Re: интерактивность
Отправлено: cashis от 07 Июля 2009, 12:57:10
Возникла ещё одна проблема с интерактивностью:
Если я хоть каким нибудь способом прикручиваю DetectMouseCollision к DrawObject любого объекта он просто перестаёт работать, как только отключаю работает только так =((((((((
(уже и через Set Value и через IF пробовал, всё равно не фурычит)
Помогите чем можете !
Заранее Спасибо.


Название: Re: интерактивность
Отправлено: mixey от 07 Июля 2009, 21:14:43
cashis, а я собственно не понял в чем проблема! Ты присоединяешь канал DetectMouseCollision (который реагируют на пересечение объекта с курсором) к параметру  DrawObject (который отвечает за прорисовку объекта на экране). Если значение этого параметра равно 0, то объект не рисуется, если 1, то рисуется. Поскольку изначально курсор объект не пересекает, то у тебя в DetectMouseCollision будет 0 и объект не будет виден. А еще ты не присоединил к DetectMouseCollision ничего, поэтому он у тебя всегда будет 0.


Название: Re: интерактивность
Отправлено: cashis от 08 Июля 2009, 11:56:03
cashis, а я собственно не понял в чем проблема! Ты присоединяешь канал DetectMouseCollision (который реагируют на пересечение объекта с курсором) к параметру  DrawObject (который отвечает за прорисовку объекта на экране). Если значение этого параметра равно 0, то объект не рисуется, если 1, то рисуется. Поскольку изначально курсор объект не пересекает, то у тебя в DetectMouseCollision будет 0 и объект не будет виден. А еще ты не присоединил к DetectMouseCollision ничего, поэтому он у тебя всегда будет 0.
Я это чисто схематически изобразил, вообще, я сейчас пытаюсь сделать инвентарь и для этого мне надо чтобы при клике на объект он пропадал, но одновременно появлялся в инвентаре, я сделал всё поидее как надо, но всё равно если хоть где-то присутствует DetectMouseCollision, то всё перестаёт работать.


Название: Re: интерактивность
Отправлено: Ruslan от 08 Июля 2009, 12:08:04
cashis
Сделай проще, введи дополнительную переменную(флаг), которая будет менять значение на 0 или 1(например 1 это означает, что объект попал в инвентарь) и переключай.
Наверное удобнее будет использовать массив(можно будет в цикле перебирать объекты и менять значения в массиве с индексом "номер объекта").


Название: Re: интерактивность
Отправлено: cashis от 08 Июля 2009, 12:15:32
cashis
Сделай проще, введи дополнительную переменную(флаг), которая будет менять значение на 0 или 1(например 1 это означает, что объект попал в инвентарь) и переключай.
Ну тк я понимаю, это всё халява, этому учат на начальных уроках програмирования =))))) Я просто не могу заставить объект исчезать, а чтобы при клике объект появлялся в инвентаре, да это вообще легко сделать. Значит придётся пользоваться моей первой идеей, чтобы при клике на объект он менял положение (и таким образом уходил например глубоко под землю).


Название: Re: интерактивность
Отправлено: cashis от 08 Июля 2009, 12:37:16
Ты похоже чё то не понял, и ты мне так объясняешь, как-будто я вообще дурак.
Я сделал так:
Если нажата кнопка мыши, курсор колизирует с объектом и объект виден, то он должен стать невидимым и одновременно становится видимым объект в инвентаре.
И обратное для объекта в инвентаре.


Название: Re: интерактивность
Отправлено: Ruslan от 08 Июля 2009, 12:38:26
если ты все уже сделал, то я не пойму в чем тогда проблема?
сделай два объекта(один в сцене отображается, другой в инвентаре) и включай-выключай их.


Название: Re: интерактивность
Отправлено: Viik от 08 Июля 2009, 12:58:32
Получаеться что твой DetectMouseCollision используеться как флаг для объекта который он же проверяет. Чтобы DetectMouseCollision заработал нужно делать как Ruslan тебе и написал через сет валюе. Если объект не рисуеться (Draw object = 0) то и никакого детекта не будет. Поэтому когда к Draw object ты подключаеш DetectMouseCollision он и не работает, ему нечего детектить, он не видит объект, а объект невидим потому что не никакого детекта ;)


Название: Re: интерактивность
Отправлено: cashis от 08 Июля 2009, 15:17:53
Получаеться что твой DetectMouseCollision используеться как флаг для объекта который он же проверяет. Чтобы DetectMouseCollision заработал нужно делать как Ruslan тебе и написал через сет валюе. Если объект не рисуеться (Draw object = 0) то и никакого детекта не будет. Поэтому когда к Draw object ты подключаеш DetectMouseCollision он и не работает, ему нечего детектить, он не видит объект, а объект невидим потому что не никакого детекта ;)
ну тк ты смотрел мою вторую картинку? там ещё два условия кроме detectmousecollision, те два работают замечательно, а этот нет, ладно короче, буду разбираться.
P.S.:У меня итак используется флаг и на объекте в инвентаре и в мире, и я его изменяю уже от этих трёх условий, но из-за того что в этих условиях DetectMouseCollision он не пашет.


Название: Re: интерактивность
Отправлено: cashis от 08 Июля 2009, 17:43:51
Короче я сделал =))))))
Я ещё хотел добавить чтобы был прицел, но почему-то при добавлении его перестовала работать "инвентарная система".
Вобщем вот: http://narod.ru/disk/10730297000/inventar.rar.html
Кто хочет может поковыряться. При желании мона добавить физику и чтобы объект появлялся перед тобой после выбрасывания, главное захотеть.
Спасибо за помощь (хоть я и сделал по своему)!!!


Название: Re: интерактивность
Отправлено: cashis от 30 Июля 2009, 17:58:04
ЛЮДИ НЕУЖЕЛИ СОЗДАНИЕ ИНТЕРАКТИВНОСТИ В ИГРАХ ЭТО ТАКОЕ МУТОРНОЕ ДЕЛО ?
Я недавно начал генерировать идею и концепцию своей игры ( которую надеюсь сделаю ), и в процессе этого начал думать, как все эти идеи реализовывать в проекте. Я вообще хочу создать стелф-экшен и как в любой игре этого жанра существует огромный асортимент взаимодействий с врагом.
Например: Пристрелить, подкрасться сзади оглушить (или же воткнуть нож в спину, или же схватить, приставить нож к шее и начать допрос), срыгнуть на человека и при этом оглушить, переодеться в одежду врага (Привет Hitman`у, и слава богу мне это не нужно), вырвать за шиворот из окна и т.д.
Для каждого из этих движений нужно создавать кучу условий, которые будут состоять из огромных паутин каналов, но это всего один персонаж, один, но не бывает же игр где есть всего один враг! Ну допустим что врагов сто, мы создали условия для одного человека и теперь нам надо перенести их на отавшиеся 99, но как, неужели копировать? Так потом же придётся поновой присоединять ярлыки (если они использовались, т.к. я думаю что все известно, что при копировании каналов в квесте ярлыки исчезают). Да и представьте себе эту картину эти паутины каналов, сто ответвлений с сотнями нод, да в таких дебрях любой комп сдохнет, а уж а том как в этом разбираться я вообще молчу.
Ну так вот из всего этого рассказа следует что так просто это не делается, должна быть какая-то лазейка, чтобы облегчить себе жизнь.
Ну и вот мой вопрос: КАКАЯ ?


Название: Re: интерактивность
Отправлено: DimiS от 30 Июля 2009, 19:31:28
Просто крик души, яхз  :D

Человечество уже давно столкнулось с проблемой которую ты описал. Для её решения было придумано разделение каких то данных от каких то операций с этими данными. А потом разделили эти самые операции на функции. И придумали такое понятие как "параметры функции" -- это такие данные, с помощью которых можно управлять тем как будет работать функция. С помощью параметров можно задавать какие данные и каким образом эта функция изменит.
В квесте немного размытое разделение на данные и на операции с этими данными. Очевидно что Value это данные, а Set Value это операция с некоторыми данными. Но для удобства сделали так чтобы Value всегда копировал себе то значение которое к нему присоеденино по чаилд линку. А SetValue умеет возвращять значение своего первого чаилда если к нему обратится как к данным. Это следующий после функций уровень абстракции -- объекты, структура которая объединяет в себе некоторые данные и некоторые функции которые могут работать с этими данными. Каждый ченел в квесте это объект, и чаилды это параметры основной функции объекта. Ну это всё как-то приближенно, в общих чертах. Речь не о ченелах, они просто как пример объектно ориентированого подхода.
Так вот, создавая функцию тебе важно выделять два основных момента -- параметры функции, и точка входа в функцию. Точка входа это грубо говоря тот ченел, линк на который ты потом будеш вызывать в разных местах. Параметрами чаще всего у тебя будут индексы в массивах. Массив это такое упорядоченое объединение однотипных структур данных. В качестве масива можно использовать не только квестовый Array, но и простой ченел свич ;) -- он даёт доступ к элементу массива по индексу, большего обычно и не надо. Но Array позволяет делать много чего другого, сортировку например, и имеет удобный интерфейс для просмотра из квестового редактора.
Итак обычно функция выглядит так: некий отдельный .cgr файл содержит в себе паблик ченел входа в функцию. Так же там есть несколько паблик ченелов которые работают параметрами. Когда вызывают функцию то сначала устанавливают параметры, с помощью того же Set Value например. А потом обращяются к точке входа. Частенько от точки входа требуется ещё и вернуть какое то значение, типа результат функции, тогда можно использовать ченел CallOnGetChild.
В принципе с помощью функций тебе станет уже легче обрабатывать много однотипных ситуаций. А с помощью квестового ОО можно добится ещё большего, но для начала рекомендую хорошо освоить написание функций.

П.С. мне кажется последние два поста уже не относятся к теме топика.