forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Триггеры. Как сделать? (http://forum.boolean.name/showthread.php?t=14333)

Aikon 02.03.2011 15:47

Триггеры. Как сделать?
 
Делал, создавая кубики и пряча их альфой
Код:

        trigger = CreateCube(scenePivot);
        PositionEntity trigger, -4.5, 3, 2
        EntityPickMode trigger, 2
        If Not IS_DEBUG Then EntityAlpha trigger, 0
        NameEntity trigger, "trigger"

Но как выяснилось, при загрузке уровня все объекты с альфой видны пару секунд, т.е. получается что игрок может видеть триггеры, что совсем плохо.
Как быть? Pivot-у вроде безразмерен и поэтому им воспользоваться наверно не получится.

Триггеры нужны на столкновение и на "игрок увидел".

Nex 02.03.2011 16:26

Ответ: Триггеры. Как сделать?
 
Цитата:

Но как выяснилось, при загрузке уровня все объекты с альфой видны пару секунд
Возможно из за этого
Цитата:

If Not IS_DEBUG Then EntityAlpha trigger, 0

RBK 02.03.2011 16:37

Ответ: Триггеры. Как сделать?
 
Цитата:

Но как выяснилось, при загрузке уровня все объекты с альфой видны пару секунд
Проверь код еще раз, скрыть триггеры нужно до использования команды RenderWorld.
Цитата:

Pivot-у вроде безразмерен и поэтому им воспользоваться наверно не получится.
используй для Pivot-а EntityRadius или EntityBox.

Alex_Noc 02.03.2011 16:58

Ответ: Триггеры. Как сделать?
 
я если честно НИХРЕНА не понял - русским языком пиши, чтобь было понятно.

Aikon 03.03.2011 00:06

Ответ: Триггеры. Как сделать?
 
Проблема решена, вместо
Код:

EntityAlpha trigger, 0
Загрузил прозрачную текстуру и повесил ее на триггер.
Но если у кого, какие мысли будут, то готов выслушать (может я неправильно триггеры делаю?)


RBK, для проверки столкновений Pivot видимо подойдет, а вот для проверки "увидел ли игрок кубик", что-то сомневаюсь надо попробовать.
Хм, еще возникла идея загрузить модельку кубика, полностью покрытого прозрачной текстурой или этому задать.


Nex, IS_DEBUG это булевая переменная для отладки. В режиме отладки и расстановки я сам разумеется хочу видеть триггеры. Проблема возникает, когда IS_DEBUG = False.

Цитата:

Сообщение от Alex_Noc (Сообщение 181159)
я если честно НИХРЕНА не понял - русским языком пиши, чтобь было понятно.

Хм, попробую по другому описать.
Делаю небольшую игру от первого лица. Игрок бегает по уровню. Необходимо вызывать события, при достижении игрока некоторой точки, напр. забежал за угол здания или увидел какой то объект.
Проверку достижения точки сделал, разместив на карте Cube с именем и обработкой коллизии.
Код:

trigger = CreateCube(...) ;Создали
PositionEntity trigger, ... ; Задали позицию
EntityType trigger, COLLISION_TRIGGER ; Задали тип столкновения
NameEntity trigger, "trigger" ; Задали имя

Если игрок столкнулся с ним, то считается, что игрок достиг заданной точки, т.е. триггер сработал. Разумеется игрок не должен видеть данный Cube, поэтому я его "скрыл", сделав полностью прозрачным через
Код:

EntityAlpha trigger, 0
Добавление триггера делаю при загрузке уровня, т.е. вызывается функция, выполняющая последовательно
1. Создание камеры и игрока
2. Загрузку основной сцены
3. Расстановку триггеров и дополнительных объектов.

Как это примерно выглядит, в коде
Код:

ОсновнойЦиклПрограммы
    ОбновитьСцену
    UpdateWorld
    RenderWorld
КонецОсновногоЦикла

В ОбновитьСцену при наступлении определенных условий вызывается функции ОчиститьСцену и потом ЗагрузитьСцену (описана выше).
Однако после того, как загружаю сцену триггеры еще видны секунду где то, а потом за счет выставленной Aplha скрываются. Надо как то их отрисовать, чтобы не было видно.

Nex 03.03.2011 08:04

Ответ: Триггеры. Как сделать?
 
Цитата:

IS_DEBUG это булевая переменная для отладки. В режиме отладки и расстановки я сам разумеется хочу видеть триггеры. Проблема возникает, когда IS_DEBUG = False.
Проще создать триггер сразу с нулевой прозрачностью, а потом в цикле уже дебажить..

Randomize 03.03.2011 11:44

Ответ: Триггеры. Как сделать?
 
Можно припарентить все триггеры к пивоту и скрыть этот пивот. (ShowEntity/HideEntity распространятся на всю иерархию)

RBK 03.03.2011 11:50

Ответ: Триггеры. Как сделать?
 
Цитата:

RBK, для проверки столкновений Pivot видимо подойдет, а вот для проверки "увидел ли игрок кубик", что-то сомневаюсь надо попробовать.
Используй для Pivot-а EntityPickMode 1 или 3.

LLI.T.A.L.K.E.R. 03.03.2011 12:59

Ответ: Триггеры. Как сделать?
 
Цитата:

Сообщение от Aikon (Сообщение 181152)
Делал, создавая кубики и пряча их альфой
Триггеры нужны на столкновение и на "игрок увидел".

Может лучше pivot-ы делать. Проверять не на столкновение, а на дистанцию. Зачем триггерам Triangles-ы?

Вот TriggerSystem
(если что TrigMain.bb)
работает на радиусах.

Alex_Noc 04.03.2011 20:22

Ответ: Триггеры. Как сделать?
 
Твоя проблема в том что изначально нужно сразу после загрузки на все обьекты тригеры прописать HIDEENTITY и только по событиям вызывать - например у тя полоса загрузки =100%
if load_bar>=100 then Showentity (TRIGER твой)
иначе будешь долго мозг чесать в поиске проблемы (Я сталкивался просто с этим!)
Удачи! Надеюсь поможет %)


Часовой пояс GMT +4, время: 00:48.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot