загрузка . . .

Copyright © 2004

на главную


iboursky@mtu-net.ru

 

полозок

скачать исходник

содержание:
  • укомплектовываем сцену
  • назначаем курсоры
  • пишем свою функцию "sliderScriptH"
  • организовываем горизонтальное движение полозка за мышью
  • ограничиваем движения полозка
  • знакомимся с функциями "min()" , "max()"
  • копирование перетаскиванием
  • меняем вид полозка
  • отображаем результаты движения полозка в текстовом поле
  • зацикливаем действие во 2-м кадре
    укомплектовываем сцену
    Импортируем в Cast Window две картинки: вид незадействованного слайдера и вид задействованного слайдера. Причём картинки должны быть в соседних ячейках, а картинка незадействованного слайдера должна иметь больший порядковый номер ячейки. Это важно для последующего программирования.
    На сцене рисуем прямоугольник инструментом Filled Rectangle

    В Инспекторе свойств на закладке Sprite задаём размеры прямоугольника и Foreground Color (жёлтый).


    Проверяем в партитуре , чтобы жёлтый прямоугольник фона был в спрайте №1. В спрайтовый канал №2 перетаскиваем из Cast Window образец с картинкой незадействованного слайдера (с красным огоньком). Можно перетащить прямо на сцену, но потом обязательно проверить в партитуре, чтобы номер спрайта слайдера был на 1 больше спрайта фона. Это тоже важно для последующего программирования.

    Перетащим на сцене слайдер на жёлтый прямоугольник.

     

     

    назначаем курсоры

    Создадим для полозка новый Behavior (любым из описанных в "бабочке" способом) . (Например: пр. кнопкой мыши в полозок на сцене; выбрать "Behaviors..."; выбрать "+"; выбрать "New Behavior..."; впечатать название "полозок"; "OK";)

    Назначение курсора "Указательный палец" на момент входа курсора в область спрайта

    В окне "Behavior Inspector", нажав на кнопку со знаком плюс в группе "Events", выбираем "Mouse Enter".

    Нажав на кнопку со знаком плюс в группе "Actions", выбираем "Cursor" ->"Change Cursor..."
    В открывшемся окне из выпадающего списка выбираем "Finger".

    Возвращение курсора на момент выхода курсора из области спрайта

    В окне "Behavior Inspector", нажав на кнопку со знаком плюс в группе "Events", выбираем "Mouse Leave".

    Нажав на кнопку со знаком плюс в группе "Actions", выбираем "Cursor" ->"Restore Cursor..."

    Назначение курсора "кулак" на момент нажатия левой кн. мыши в области спрайта

    В окне "Behavior Inspector", нажав на кнопку со знаком плюс в группе "Events", выбираем "Mouse Down".

    Нажав на кнопку со знаком плюс в группе "Actions", выбираем "Cursor" ->"Change Cursor..."
    В открывшемся окне выбираем "Closed Hand".

    Назначение курсора "Указательный палец" на момент отпускания левой кн. мыши в области спрайта.

    В окне "Behavior Inspector", нажав на кнопку со знаком плюс в группе "Events", выбираем "Mouse Up".

    Нажав на кнопку со знаком плюс в группе "Actions", выбираем "Cursor" ->"Change Cursor..."
    В открывшемся окне выбираем "Finger".

     

     

    пишем функцию "sliderScriptH"

    Теперь нам надо ограничить движение слайдера.

    Заготавливаем болванку функции.

    В окне "Behavior Inspector", нажав на кнопку со знаком плюс в группе "Events", выбираем "New Event..." и в открывшемся окне впечатываем "sliderScriptH".

    Запоминаем номер спрайта полозка.

    Создаём переменную-свойство mySprNum и инициализируем её:

    В окне "Behavior Inspector", нажав на кнопку со знаком плюс в группе "Events", выбираем "Begin Sprite".

    Нажав на кнопку со знаком плюс в группе "Actions", выбираем "New Action..."
    В открывшемся окне впечатываем "mySprNum= me.spriteNum".

    Затем, нажав на кнопку "Script Window", открываем скрипт "полозок" в Окне Скриптов и
    нам открывается захватывающая дух картина:
    неужели весь этот программный код написан нами !
    Поборов охвативший священный ужас и трепет, настраиваемся на работу уже в Окне Скриптов.

    Дописываем в скрипт первую строчку "property mySprNum". Так надо. Для объявления переменной.

    Организовываем горизонтальное движение полозка за мышью.

    Ставим курсор внутрь нашей доморощенной функции "sliderScriptH", и вставляем заготовку цикла "repeat while...end repeat". Выберете один из двух способов:

    1. Нажав кнопку "Lingo в алфавитном порядке" , выбираем из выпадающего списка нужное нам слово " repeat while...end repeat"
    2. Нажав на кнопку "Lingo по категориям" , выбираем раздел "Code Structures and Syntax", а там " repeat while...end repeat".

    Вместо появившегося "testcondition" ставим "the stillDown", что означает:"будем делать, пока нажата левая кнопка мыши".

    А вместо "statement" напишем две строчки
    Первая: "sprite(mySprNum ).locH = the mouseH", что означает: "слайдер будет на уровне мыши (по горизонтали) ".
    Вторая:"updateStage" , что означает: "тут же покажем это достопочтенной публике".

    Копирование перетаскиванием.

    Теперь нужно впечатать название нашей рабочей функции "sliderScriptH" (или "sliderScriptH()" ) внутри функции "mouseDown", чтобы её код выполнялся при нажатии кнопки мыши. Для этого достаточно перетащить выделенное слово в нужное место, удерживая при этом клавишу "Ctrl".

    Не забудьте нажать клавишу "Tab", чтобы придать стройный вид написанному.

    Запустив воспроизведение , уже можно потаскать слайдер вправо-влево !

    Но надо нажать кнопку "стоп" и попытаться ограничить движение слайдера границами жёлтого прямоугольника фона.

    Ограничиваем движения слайдера.

    Для начала перед "repeat while" объявим три локальые переменные:
    _offset= sprite(mySprNum).member.width/2 --половина ширины полозка
    RightLimit=sprite (mySprNum-1).right - _offset --ПраваяГраница на половину ширины полозка левее правого края жёлтого прямоугольника (вспомним, что мы поместили его в спрайтовый канал с номером на 1 меньше, чем номер спрайта полозка).
    LeftLimit=sprite (mySprNum-1 ).left + _offset --ЛеваяГраница на половину ширины полозка правее левого края жёлтого прямоугольника.

    Теперь вместо "sprite(mySprNum ).locH = (the mouseH)" пишем:

    1-й вариант:

    if (the mouseH) < RightLimit then --если полозок левее ПравойГраницы
     
    if (the mouseH) > LeftLimit then--и если полозок правее ЛевойГраницы
      --двигаем полозок по горизонтали за мышью
    sprite(mySprNum ).locH = (the mouseH)
    end if
    end if

    По-моему довольно понятно, но почему-то считается "признаком хорошего тона" писать то же самое через не очень наглядное "min - max":

    2-й вариант:

    L =max(the mouseH, LeftLimit )--не пускаем левее LeftLimit. Выбираем наибольшее из двух:(the mouseH, LeftLimit )
    H=min(L,RightLimit )-- не пускаем правее RightLimit . Выбираем наименьшее из двух:(L,RightLimit ).
    sprite(mySprNum ).locH = H --двигаем полозок по горизонтали за мышью

    или ещё короче и непонятнее:

    3-й вариант:

    H=min(max(the mouseH,LeftLimit ), RightLimit)--устанавливаем пределы
    sprite(mySprNum ).locH = H --двигаем полозок по горизонтали за мышью

    Теперь сами выбирайте, что написать вместо "sprite(mySprNum ).locH = (the mouseH)".



    меняем вид полозка

    Чтобы поменять вид полозка (поменять "мембера") при входе курсора в область спрайта, в функцию "on mouseEnter me" вписываем строку:
    sprite(mySprNum).member= member(sprite(mySprNum).memberNum -1)

    А чтобы поменять вид полозка при выходе курсора из области спрайта, в функцию "on mouseLeave me" вписываем строку:
    sprite(mySprNum).member= member(sprite(mySprNum).memberNum +1)

    Вот именно для этого мы и разместили картинки в соседних ячейках Cast Window.

     

    отображаем результаты движения полозка в текстовом поле на сцене

    Инструментом "Field" из "Tool Palette" "нарисуем" на сцене (справа от жёлтого прямоугольника) тестовое поле.(Или: Главное Меню->Insert->Control->Field). Впечатываем, скажем, в Cast Window его название: "текст"

    и вставляем перед"updateStage" две строчки:
    n=(sprite(mySprNum).left - sprite (mySprNum-1).left) --будет от 0 до 148 :)
    member("текст").text =string (n)
    --переводим цифру в строку

    Ну и для порядка зацикливаем действие во 2-м кадре (смотри "опыты с бабочкой").

     

    на главную
    Rambler's Top100
    Хостинг от uCoz