Использование локальных переменных

Ввод событий для кнопки выбора

Организуйте событие для кнопки Pick Planets, выполнив следующее упражнение.

1. Введите следующий код непосредственно перед последней круглой скобкой
в выражении свитка:


Построение пользовательских интерфейсов

 

on pbt_pickPlanet picked aPlanet do

(

-- Установить радиус выбранной планеты в счетчике Planet Radius

spn_planetRadius.value = aPlanet.radius

-- Установить радиус орбиты планеты в счетчике Orbit Radius

pOrbit = aPlanet.pos.controller.path

spn_orbitRadius.value = pOrbit.radius

)

Если щелкнуть на кнопке Pick Planet, выбранный объект сохранится в локальной переменной aPlanet. Имя выбранного объекта теперь автоматически отображается в надписи кнопки выбора Pick Planet.

Примечание. Программирующие на MAXScript, часто пользуются переменной obj для обозначения того факта, что объект выбран. Имя переменной obj не является ни ключевым словом, ни любым другим именем специальной переменной. Это имя упоминается здесь лишь потому, что оно часто встречается в сценариях.

2. Вычислите код сценария.

3. Щелкните сначала на кнопке Pick Planet, а затем на самой планете.

Независимо от того, какая планета выбрана, в поле счетчика Orbit Radius появляется значение 10,0, хотя радиус орбиты может достигать и 10. Напомним, что диапазон значений в счетчике ограничивается верхним пределом 10. Для правильного отображения числовых значений в счетчике необходимо изменить этот предел,

4. Замените строку spn_orbitRadius следующей строкой кода:

spinner spn_orbitRadius "Orbit Radius " range: [0,100,0]

Вычислите код сценария.

5. Щелкните на кнопке Pick Planet и выберите планету. В поле счетчика Orbit Radius появится правильно отображаемое значение радиуса орбиты.

В следующем упражнении вам предстоит ввести обработчики событий, изменяющие радиус выбранной планеты и ее орбиты в результате изменений в счетчи­ках Planet Radius и Orbit Radius.

1. Введите следующий фрагмент кода после введенного последним обработчика событий:

on spn_planetRadius changed value do()

Данное событие возникает всякий раз, когда пользователь изменяет значение свойства .value в переменной счетчика, вводя новое значение с клавиатуры или настраивая счетчик с помощью мыши.

Но дело в том, что при вызове данного обработчика событий требуется изменить радиус объекта, выбранного в предыдущем обработчике событий, а имя этого объекта хранится в переменной aPlanet, которая является локальной для данного блока кода. Следовательно, для того чтобы использовать


Глава 2

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

Для этой цели необходимо объявить переменную pPlanet вне области
действия всех обработчиков событий и хранить в ней имя объекта. Это
даст возможность использовать ее в любом обработчике событий внутри
данного сценария.

2. Введите следующую строку кода перед обработчиком событий pbt_pickPlanet:
local pPlanet

3. Введите в начале кода обработчика событий pbt_pickPlanet следующую
строку:

pPlanet = aPlanet

В этой строке значение переменной pPlanet устанавливается в соответст-
вии с выбранной планетой. Теперь переменную pPlanet можно использо-
вать в остальных обработчиках событий.

4. Введите внутри обработчика событий spn_planetRadius следующую
строку кода:

pPlanet.radius = spn_planetRadius.value
Данный фрагмент кода теперь должен иметь следующий вид:
local pOrbit

on pbt_pickPlanet picked aPlanet do

(

pPlanet = aPlanet

-- Установить радиус выбранной планеты в счетчике Planet Radius

spn_planetRadius.value = aPlanet.radius

-- Установить радиус орбиты планеты в счетчике Orbit Radius

pOrbit = aPlanet.pos.controller.path

spn_orbitRadius.value = pOrbit.radius

)

)

on spn_planetRadius changed value do
(

pPlanet.radius = spn_planetRadius.value

)

5. Вычислите код сценария.

6. Щелкните сначала на кнопке PickPlanet, а затем на планете.

7. Измените значение в счетчике PlanetRadius. Радиус планеты соответственно изменится.

Сделайте то же самое для орбиты планеты. И в этом случае возникнет аналогичная проблема с переменными, поскольку переменная pOrbit является локальной для обработчика событий pbt_pickPlanet. Для того чтобы
сделать доступной эту переменную, ее следует объявить локально вне обработчиков событий.

8. Введите следующую строку кода после строки объявления локальной переменной pPlanet:

local pOrbit


Построение пользовательских интерфейсов

9. Введите следующий фрагмент кода после введенного последним обработ­чика событий:

on spn_orbitRadius changed value do

(

pOrbit.radius = spn_orbitRadius.value

)

10. Вычислите код сценария.

11. Щелкните сначала на кнопке PickPlanet, а затем на планете.

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