Темы:
Types, typecasting
Переменные, параметры функций и возвращаемые значения имеют типы данных. LSL поддерживает 7 основных типов данных.
- integer - целое число в диапазоне от -2,147,483,648 до 2,147,483,647
- float - десятичное число с плавающей точкой в диапазоне от 1.175494351E-38 до 3.402823466E+38
- vector - три float в форме < x , y , z >. Используются для обозначения позиции, цвета или для Эйлер-вращений
- rotation - вращение, до четырех float в форме < x , y , z , s >
- key - UUID (специальная строка) используется для идентификации внутри SL, агентов, объектов, звуков, текстур, предметов инвентаря и запросов к dataserver
- string - последовательность символов лимитированная только размером свободной памяти скриптов (смотрите LSL. Основы. Часть 3)
- list - список значений переменных одного или нескольких типов, используется вместо массивов
Одни типы данных можно переводить в другие. Для этого используются выражения вида ((новый тип)выражение). Типы данных всегда должны соответствовать тем, которые требуется передать другой переменной или функции. При несоответствии необходимо выполнить приведение типов. Лишь в двух случаях специальная конвертация не требуется: при передачи integer в float и string в key.
В качестве примера приведем упоминавшуюся в прошлых частях функцию llSay, которая требует передачи ей типа string для вывода текста. Если нам понадобится вывести переменную другого типа, мы должны будем выполнить приведение типов. Переменная i типа integer переводится в тип string и передается функции llSay.
![]()
Пример 1
Вспомним и последний пример из третьей части нашего руководства.

Пример 2
Здесь возвращаемое функцией llGetFreeMemory значение также имеет тип integer, мы же его переводим в тип string и передаем следующей функции.
Color Vector
Рассмотрим тип вектор, который является тройным числом типа float. В LSL он форматируется в виде . Вектор используется для указания трехмерного местоположения, направления, скорости, силы, импульса, цвета и оси вращения Эйлера. К каждому компоненту вектора можно получить доступ через ".x" , ".y" , ".z".
Остановимся на векторе цвета. В LSL для обозначения цвета используются вектор, содержащий три значения с плавающей точкой - от 0.0 до 1.0 для красного, зеленого, синего.
Например, vector color=<1.0, 0.5, 0> расшифровывается как "100% красного, 50% процентов зеленого и 0% синего" - это параметры оранжевого цвета.
Попробуем создать скрипт, который будет изменять цвет объекта при прикосновении к нему. Для этого еще раз обратимся к материалу третьей части нашего руководства и используем (state) для создания изменений в пределах двух цветов, например, красного и зеленого. Для этого нам потребуется функция смены цвета объекта llSetColor().
llSetColor
Синтаксис: llSetColor(vector color, integer face)
Описание: устанавливает цвет стороны объекта; если необходимо перекрасить весь объект, используется константа ALL_SIDES.
Стороны объекта мы рассмотрим далее, сейчас же будем пользоваться константой ALL_SIDES и получим в итоге следующий скрипт:

Пример 3
Проверим его в работе.


Скрипт в действии - куб меняет свой цвет с красного на зеленый
Обратите внимание на особенность touch_start - если вы нажмете на объект и не будете отпускать кнопку, он станет моргать двумя цветами попеременно. Это связано с тем, что событие touch_start начинает выполнение в начале нажатия (см. Часть 2). Соответственно и при передаче управления в state green срабатывает событие touch_start. Для избежания такой ситуации используйте события touch_end, touch().
К компоненту любого вектора, в том числе и цвета, можно обращаться напрямую. Эти компоненты будут иметь тип float и для того чтобы с ними работать, например, вывести в чат, их нужно привести к типу string.

Пример 4
Теперь объект сменит цвет на оранжевый, если на него нажать, и напишет в общий чат компоненты вектора цвета.

Результат работы скрипта
Для упрощения "кодирования" цвета в тип вектор воспользуйтесь этой таблицей.
|
Manoul Carnell 22:59, 28.06.07 ссылка
Без придирок: слишком сложно для "основ". Маленькая девочка не может пнуть кошку. Она зовет на помощь бабушку. Ответить |
|
Koshachii Xeno 23:48, 28.06.07 ссылка
Ну не совсем ведь для детского сада пишется. |
|
Marie 03:12, 29.06.07 ссылка
Пасибы |















