Темы:
Данная статья является приложением к переводу материала TutorialVehicle, размещенного на сайте LSL Wiki.
Все части перевода: 1, 2, 3, 4, 5, 6 и приложение 1.
ФУНКЦИИ
llSetVehicleType(integer type)
Определяет объект как транспортное средство.
Second Life содержит встроенный физический движок, который позволяет объектам вести себя согласно законам физики реального мира. Манипулировать объектом можно с помощью скриптовых воздействий, однако сравнительно медленная скорость выполнения скриптов делает затруднительным создание нормально движущихся транспортных средств. Определение объекта транспортным средством ликвидирует скоростные ограничения скрипта и обеспечивает более натуральное его поведение. Таким способом физика объекта может быть задана довольно точно и получится хорошо управляемое транспортное средство. Для объявления объекта транспортным средством ему должен быть присвоен один из типов транспорта:
VEHICLE_TYPE_NONE - отменяет принадлежность объекта к классу транспортных средств. Значение равно 0.
Отменить принадлежность объекта к классу транспортных средств.
VEHICLE_TYPE_AIRPLANE - объект использует линейное смещение для набора высоты, не способен зависать в воздухе, накреняется при поворотах. Значение равно 4.
VEHICLE_TYPE_BALLOON - объект способен зависать, испытывает сопротивление воздуха, нет смещения. Значение равно 5.
VEHICLE_TYPE_BOAT - объект парит по воде с большим сопротивлением и некоторым угловым смещением. Значение равно 3.
VEHICLE_TYPE_CAR - объект передвигается по земле, требуется двигатель для возможности управления объектом посредством внешних устройств (клавиатура, мышь) или по наступлению события (timer event). Значение равно 2.
VEHICLE_TYPE_SLED - простое транспортное средство, передвигающееся по земле и предпочитающее движение вдоль своей локальной оси X. Значение равно 1.
Пример:
// Объявление объекта самолетом
llSetVehicleType(VEHICLE_TYPE_AIRPLANE);
// Отмена принадлежности объекта к классу транспортных средств
llSetVehicleType(VEHICLE_TYPE_NONE);
llSetVehicleFloatParam(integer param_name, float param_value)
Устанавливает для транспортного средства параметр param_name в формате с плавающей точкой в значение param_value.
llSetVehicleVectorParam(integer param_name, vector param_value)
Устанавливает для транспортного средства параметр векторного типа param_name в значение param_value.
llSetVehicleRotationParam(integer param_name, rotation param_value)
Устанавливает для транспортного средства параметр вращения param_name в значение param_value.
llSetVehicleFlags(integer flag)
llSetVehicleFlags задает специальные характеристики транспортного средства.
Существуют несколько аспектов поведения транспортных средств, которые не могут быть определены через параметры, но они помогают описать специальные случаи, такие как способность транспортного средства передвигаться только по воде или отсутствие вертикального движения. Корректная установка флагов очень важна при создании хорошего транспортного средства.
Несколько флагов могут быть установлены одновременно с помощью логической операции "или" (OR). Флаг может быть сброшен функцией llRemoveVehicleFlags.
Подробное описание флагов можно найти в Приложении 1.
Примеры:
// Транспортное средство будет парить не над поверхностью суши, а на глобальной высоте
llSetVehicleFlags(VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT);
// Выключить вертикальное смещение и двигатели
llSetVehicleFlags(VEHICLE_FLAG_LIMIT_MOTOR_UP | VEHICLE_FLAG_NO_DEFLECTION_UP);
// Сбросить все флаги
llRemoveVehicleFlags(-1);
Управление транспортными средствами с помощью движения мыши в SL-клиенте
(проверено на версии 1.4)
Одно из полезных свойств этой функции заключается в следующем. Когда она используется с независимой камерой, обеспечивается гораздо более простое управление транспортным средством, особенно при низкой производительности SL-клиента.
Установка нового флага VEHICLE_FLAG_MOUSELOOK_STEER изменяет смысл параметра VEHICLE_ANGULAR_MOTOR_DIRECTION:
- В режиме вида от первого лица (mouselook) транспортное средство будет стремиться повернуть в направлении взгляда камеры. Скорость движения вдоль каждой из осей пропорциональна соответствующим компонентам параметра VEHICLE_ANGULAR_MOTOR_DIRECTION. Если нужно, чтобы угловой двигатель поворачивал транспортное средство только влево или вправо (вращение вокруг его оси X), установите этот параметр в значение, скажем, <0,0,5>. При этом компоненты движения по осям X и Y равны нулю, а компонента по оси Z будет пропорциональна 5. Таким образом, если вы повернете мышью вид камеры на 45 градусов влево, то двигатель будет стремиться повернуть объект вокруг оси Z влево со скоростью 5*45 градусов в секунду.
- Задействован параметр VEHICLE_ANGULAR_MOTOR_TIMESCALE. Если желаете сделать транспортное средство быстро отзывающимся на движение мыши, установите постоянную времени в малое значение, а если хотите придать объекту некоторую инертность, используйте большее значение для нее. А вот параметр VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE не используется в режиме вида от первого лица.
Введен новый флаг VEHICLE_FLAG_MOUSELOOK_BANK. По сути это то же самое, что и флаг _STEER, за исключением того, что он интерпретирует поворот (yaw) как крен (roll). Если свойство крена активно, при движении мыши влево или вправо транспортное средство будет накреняться в соответствующую сторону.
Замечание: при установленном флаге _MOUSELOOK_BANK компоненты скорости двигателя являются коэффициентами пропорциональности, связывающими скорость вращения объекта со скоростью вращения устройства ввода. Таким образом, если вам нужно ограничить действие углового двигателя только по крену, можете установить его значение равным, например, <5,0,0>.
Еще одно замечание: По умолчанию изменение направления взгляда камеры в режиме вида от первого лица изменит направление движения транспорта, в котором вы находитесь. Когда вы переводите взгляд от центра с помощью мыши, транспортное средство станет поворачивать до тех пор, пока направление его движения не совпадет с новым направлением взгляда камеры. Для развязки движения камеры и транспорта нужно установить флаг VEHICLE_FLAG_CAMERA_DECOUPLED. Вероятно, большинство из вас захочет установить этот флаг при управлении транспортом с помощью мыши.
В данный момент управление мышью работает только в режиме от первого лица, поэтому, выйдя из этого режима, вы уже не сможете поворачивать транспорт с помощью мыши.
llRemoveVehicleFlags(integer flags)
Сбрасывает флаги транспортного средства, установленные ранее посредством llSetVehicleFlags.
Не уверены, работает ли это для llSetVehicleFlags, но значение параметра flags равное -1 для функции llRemoveVehicleFlags сбросит все флаги.
Источник TutorialVehicle














