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

Quest3D => Программирование => Тема начата: anval от 17 Мая 2008, 10:00:48



Название: Вопрос lua спецам
Отправлено: anval от 17 Мая 2008, 10:00:48
Загружаются и выгружаются cgr фалйлы в случае столкновения бокса с объектами array.В таблице LuaLoad и  LuaRemove подключены через ArrayChannel т.е.я вписывал для каждой загрузки и выгрузки назвние cgr файла.Может есть более простой вариант ,что бы при смене  строки в таблице загружалсЯ свой файл.Т.е.изменялось название загружаемого файла при именении условия в Lua.


Название: Re: Вопрос lua спецам
Отправлено: mistud от 18 Сентября 2008, 22:25:40
Извини, anval, это не ответ на твой давний вопрос! Просто название темы, созданной тобой, очень подходит под... мой впорос :)

Итак, друзья, разрешите изложить проблему. Решил сделать простенький просмотровщик объектов. Конкретно в сцене 3 объекта. Мне нужно сделать так, чтобы между ними можно было переключаться. Решил это сделать при помощи ЛУА скрипта, во избежание шибко ветвистого дерева нод. Но что-то не складывается у меня пока дружба с ЛУА... Сперва, объясню, что есть что на прикрепленной картинке, а после - непосредственно вопросы.

Первый дочерний канал ЛУА - это количество объектов в сцене. Их три: нулевой, первый и второй. Второй и третий каналы ЛУА - это кнопки переключения между объектами (влево и вправо, соответственно). Теперь, непосредственно к тексту в ноде ЛУА. Сперва объявляю дочерние ноды ЛУА: maxobj, left, right. Далее переменную "objnum = 0", что отвечает за  текущий номер объекта, который должен рендериться. Ну и после записываю условия нажатия на кнопки "влево" и "вправо". Значения left и right, равные двум означают, что соответствующая кнопка нажата (и пора сменить рендерящийся объект). И в конце концов хочу, чтобы ЛУА выдал мне новое значение (номер) рендерящегося объекта. Ну, думаю, доступно изложил. Теперь вопросы.

Во-первых, правильно ли записаны условия IF в целом и можно ли в них использовать знаки "<" и ">", или им есть какая-то замена, которую и нужно использовать вместо них. Спрашиваю, потому, что при вводе данных символов квест издает звук, типа ошибки, хотя ничего не пишет и не блокирует.
И во-вторых, когда я объявляю в ЛУА первый и второй дочерний объекты (т.е. непосредственно кнопки ВЛЕВО и ВПРАВО), то при запуске проекта, ЛУА вообще не реагирует на нажатие этих кнопок, хотя текстура меняется на текстуру нажатой кнопки. А значения нод "But_Left(Value)" и "But_Right(Value)" не меняются с нуля на двойку, но если в ЛУА закомментировать строчки с объявлением этих каналов, они становятся активными и при нажатии на кнопки меняют свои значения с нуля на двойку. Как с этим бороться - ума не приложу :(

В общем, друзья, выручайте!

З.Ы. На карйний случай буду благодарен, если кто-то предложит альтернативное решение моей проблемы, т.е. без использования ЛУА.


Название: Re: Вопрос lua спецам
Отправлено: Const_47 от 19 Сентября 2008, 14:36:26
&Mistud
Что сразу бросается в глаза, это неверное логическое условия вот почему But_left But_Right должны по вашему возвращать 2? Если они возвращают булевское 0 - 1?(как я понимаю это реакция на нажатия клавиши?). Так как  But_left , But_Right никогда не возвращают 2 канал objectNumber всегда будет равен 0. И вот это local objnum = 0. По сути Q3D, это БОЛЬШОЙ ЦИКЛ и ваш LuaChannel это элемент такого цикла. Такое обявление может быть логически опасно!!! Припустим пользователь хотел посмотреть на 2 модель(и выбрал ее), а вы ему local objnum = 0, что он увидит?(Помните о БОЛЬШОМ ЦИКЛЕ).

Будут проблемы дать црг, версии не выше 4.0. Идеально 3.6.6.


Название: Re: Вопрос lua спецам
Отправлено: Const_47 от 19 Сентября 2008, 14:50:24
&anval

можно, если я вас понял.

local crgname = tblname

где сrgname строковая переменная,tblname строка из таблицы.

Подгружая сrg вписываем такую переменную вместо имени сrg.


Название: Re: Вопрос lua спецам
Отправлено: mistud от 19 Сентября 2008, 16:13:15
&Mistud
Что сразу бросается в глаза, это неверное логическое условия вот почему But_left But_Right должны по вашему возвращать 2? Если они возвращают булевское 0 - 1?(как я понимаю это реакция на нажатия клавиши?). Так как  But_left , But_Right никогда не возвращают 2 канал objectNumber всегда будет равен 0. И вот это local objnum = 0. По сути Q3D, это БОЛЬШОЙ ЦИКЛ и ваш LuaChannel это элемент такого цикла. Такое обявление может быть логически опасно!!! Припустим пользователь хотел посмотреть на 2 модель(и выбрал ее), а вы ему local objnum = 0, что он увидит?(Помните о БОЛЬШОМ ЦИКЛЕ).

Будут проблемы дать црг, версии не выше 4.0. Идеально 3.6.6.

Нет, Const_47, у меня каналы But_left и But_Right могут и очень даже возвращают двойку. У меня три текстуры на каждую кнопку: нулевая - выключено, первая - наведенная мышь, вторая - щелчек мыши. И именно эту двойку я и хочу использовать в ЛУА. А теперь можешь кое-что мне пояснить? Чем конкретно мое объявление "local objnum = 0" может быть опасно? Мне же нужно как-то обозначить номер текущего объекта, рендерящегося в сцене, чтобы, так сказать, от него "плясать". И еще. Что такое "црг"? Это в смысле *.cgr? В любом случае, я не понял последнюю строчку: "Будут проблемы дать црг, версии не выше 4.0. Идеально 3.6.6."


Название: Re: Вопрос lua спецам
Отправлено: Const_47 от 19 Сентября 2008, 17:08:10
A что я должен думать увидев принтскрин? Я думать что But_left и But_Right это ярлыки от канал type YuserInput.

Может быть опасно, причем очень.

Вот припустим

Первый кадр
local objnum = 0
Пользователь выбрал обект
local objnum = припустим(1)

Второй кадр
Рисуем обект(тот который выбрал пользователь)
А теперь в Луа
local objnum = 0!!!
И вот так, как пользователь не успел в втором кадре выбрать какой либо обьект:)))
objnum = 0!!!

А теперь вопрос. Какой обект нарисуется в третем кадре?

Хош конкретики дай црг(сrg), я ведь понятия не имею какая у тебя иерархия каналов, и что там за чем у тебя рисуется. ВЕРСИИ от 3.6.6 - 4.0.0 поскольку других у меня нет.


Название: Re: Вопрос lua спецам
Отправлено: Const_47 от 19 Сентября 2008, 18:27:01
Вот пример, обясняющий о чем это я.
http://rapidshare.com/files/146616608/error.rar.html
Там две 3D сцены GOOD и NO GOOD.
Cравните сами.