Clubrus - это адаптация Инета под простого российского пользователя!
Stolica.ru
Реклама в Интернет & Все кулички
Добро пожаловать !
Добавить в избранное






Подпись: Multimedia Builder: статьи, вопросы и ответы, образцы проектов, обмен опытом, форум

 

Урок 6. Круглый регулятор громкости

Автор: PolN, действительный член клуба любителей ММВ

На уроках по ММВ уже рассказывалось, как сделать ползунковый регулятор громкости - слайдер. И тут на форуме появился вопрос: «А как сделать круглый регулятор?» Сначала показалось, что это совсем не трудно. Возникли даже две идеи, как реализовать это на практике. Первая заключалась в том, что можно поворачивать нарисованную ручку регулятора, а вторая - нарисовать статический регулятор, а на нём точку, и перемещать эту точку по окружности, тем самым создавая иллюзию поворота ручки. Но после первых практических попыток стало понятно, что средствами ММВ это сделать будет трудно, так как программа не очень "дружит" с математикой. Она не умеет вычислять синусы, косинусы и корни числа, что при движении объекта по окружности просто необходимо уметь вычислять.

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

Но начнём по порядку. Нарисуем в каком-нибудь графическом редакторе будущую ручку регулятора громкости, например, такую:



и сохраним её (желательно в формате *.bmp).

После этого открываем программу Multimedia Builder и начинаем создавать наш проект. Для начала вставим рисунок в проект. Забегая вперёд, скажу, что нам будет нужно знать координаты центра окружности. Для удобства я буду использовать проект размером 200*200 пикселей и нашу ручку помещу ровно в центр страницы. Отсюда понятно, что центр окружности будет находиться в координатах X=100 и Y=100. У вас должно получиться вот что (для наглядности я изменил цвет страницы):



Теперь нужно избавиться от белого квадрата. Для этого зайдём в свойства рисунка и активируем флажок «Прозрачный цвет». Тут же в области просмотра можно увидеть результат. Если белые пикселы удалились недостаточно, нужно нажать кнопку "Безопасный цвет" и увеличить значение допуска.

Далее нужно создать скрипт который будет поворачивать регулятор (то есть нашу картинку) в зависимости от положения курсора мыши. Опять же забегая вперед, скажу, что для удобства расчетов было решено создать четыре скрипта, каждый из которых управляет своей зоной поворота. А общий скрипт, который решает, какому из четырех скриптов передать управление, назовем, например, Main.
Давайте мысленно разделим наш проект на четыре условные зоны. Так, как показано на рисунке:
 



Итак, скрипт Main должен определять, в какой из четырех областей находится курсор мыши, и исходя из этого решать, какую команду ему выполнять. Подумаем, как это сделать. Нетрудно заметить, что область 1 находится в пределах координат по оси Х от нуля до центра окружности, т.е. до ста, а по оси Y от центра окружности, т.е. от ста до края страницы, т.е. двухсот. Вторая область находится в пределах координат по оси Х от 0 до 100, по оси Y так же от 0 до 100. Раз областей у нас четыре то создадим четыре скрипта (Script1, Script2 …), они будут отвечать каждый за свою область.

В скрипте Main мы пропишем четыре условия:

If (MouseX()<100 & MouseY()>100) Then
  RunScript("Script1")
End
If (MouseX()<100 & MouseY()<100) Then
  RunScript("Script2")
End
If (MouseX()>100 & MouseY()<100) Then
  RunScript("Script3")
End
If (MouseX()>100 & MouseY()>100) Then
  RunScript("Script4")
End

Из этих условий видно, что скрипт оценивает координаты мыши и, исходя из этого, решает, какой скрипт запустить. В первом условии записано:

If (MouseX()<100 & MouseY()>100) Then
  RunScript("Script1")
End

Т.е. если курсор мыши находится в первой области, то надо выполнить Script1, если во второй - то Script2, и т.д.

Теперь нужно обеспечить, чтобы при нажатии левой кнопкой мыши на регуляторе запускался скрипт Main, а при отпускании кнопки скрипт останавливался.

Для запуска скрипта снова откроем свойства рисунка и поставим флажок «Разрешить действие». Затем войдем в редактор скриптов и на вкладке Mouse up напишем такую команду:

mouseup=TRUE

а на вкладке Mouse down напишем:

mouseup=FALSE
ScriptTimer("TimerA=Main","50")

Запустить-то скрипт мы запустили, но еще нужно, чтобы при нажатой кнопке скрипт работал постоянно. Значит, в конце скрипта Main нужно добавить строку:

ScriptTimer("TimerB=Main","50")

Однако если мы обойдемся только этой строкой, то не сможем остановить работу скрипта - даже если будет отпущена кнопка мыши, скрипт Main будет работать. Чтобы этого избежать, надо перед строкой ScriptTimer("TimerB=Main","50") прописать некоторое условие: 

MStatus=MouseLButton()
If (MStatus=0) Then
  mouseup=TRUE
  Return()
End

Это условие как раз и остановит работу скрипта Main, а следовательно, и работу всех остальных скриптов.
Итак, окончательное содержание скрипта Main будет таким: 

VolumeUp("rotate/2.7")
If (MouseX()<100 & MouseY()>100) Then
  RunScript("Script1")
End
If (MouseX()<100 & MouseY()<100) Then
  RunScript("Script2")
End
If (MouseX()>100 & MouseY()<100) Then
  RunScript("Script3")
End
If (MouseX()>100 & MouseY()>100) Then
  RunScript("Script4")
End
MStatus=MouseLButton()
If (MStatus=0) Then
  mouseup=TRUE
  Return()
End
ScriptTimer("TimerB=Main","50")

В самом начале этого скрипта стоит строка VolumeUp("Rotate/2.7"). Эта строка устанавливает значение громкости. Ведь громкость должна будет регулироваться в зависимости от угла поворота ручки (в дальнейшем этот угол будет обозначен Rotate). А полный угол поворота равен 2700. Однако диапазон регулирования громкости изменяется не до 270, а только до 100. Поэтому в скрипте и записано деление угла на величину 2,7 (кстати, не лишним будет напомнить, что для записи дробных чисел в ММВ используется не запятая, а точка). 

Теперь начинается самое сложное. Нужно увязать координаты курсора мыши с углом поворота регулятора. Ну, раз надо увязать - будем увязывать :))) Для начала нужно оценить, какие величины мы знаем и какие можем вычислить. У нас есть координаты мыши - мы их можем получить с помощью команд MouseX() и MouseY(). Также мы знаем координаты центра регулятора - это X=100 и Y=100.

Рассмотрим для примера первую область. В скрипте будем использовать величины от курсора мыши до центра окружности по оси X и оси Y и назовем их katX и katY соответственно (kat - это кусочек от слова катет). То есть мы рассматриваем прямоугольный треугольник, вот он:
 

 
Отсюда видно, что:

katX=100-MouseX(),
katY=100-MouseY()

Зная катеты, теоретически мы можем определить угол . Если поделить katY на katX, то получим тангенс угла α. Итак:
tg(α)=katY/katX.

Но, как я говорил в начале статьи, программа ММВ умеет производить только четыре основных арифметических действия. Она не сможет вычислить arctg(α) и предоставить нам значение угла. Поэтому мы пойдем другим путём. Вооружившись калькулятором, будем вычислять значение угла в зависимости от значения tg(α) и получившиеся значения подставлять в скрипты.

 

Дальше

 

 

 
 URL: http://clubrus.kulichki.net E-mail: Clubrus 

 





Новая версия этого сайта CLUBRUS.SU



Рейтинг ресурсов УралWeb Rambler's Top100