Clubrus - это адаптация Инета под простого российского пользователя!

Реклама в Интернет & Все кулички
Добро пожаловать !
Добавить в избранное






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

 

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

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

Итак, в начальном положении (α) равен 450, тангенс (α) равен 1, громкость в этом положении равна 0. Значит, в Script1 запишем:

katX=100-MouseX()
katY=MouseY()-100
tg=katY/katX
If (tg>1) Then
  rot=0
End
If (tg<1) Then
  rot=5
End

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

Выше было сказано, что минимальное значение угла (α) - это 45 градусов. Если мы повернём ручку на 50, то угол (α) будет равен 400. Вычислим на калькуляторе значение тангенса 400 и получим 0,84. Теперь в Script1 добавим следующее условие:

If (tg<0.84) Then
  rot=10
End

Это означает, что если мы попытаемся повернуть ручку на угол больше 50, то ручка повернётся на 100. Теперь вычислим значение тангенса 350 и получим 0,7. Добавим в Script1 ещё одно условие: 

If (tg<0.7) Then
  rot=15
End

И так далее, прибавляя к значению rot по 50, пока не дойдём до 450.

Но это ещё не всё. Нужно ещё поворачивать ручку на величину rot. Значит, в конце всех условий нужно прописать команду поворота ручки, которая выглядит следующим образом:

rotate=rot
RotateImageTo("Ручка","rotate")

Надеюсь, тут всё понятно.
Но и это ещё не всё. Нам ведь надо обеспечить непрерывную работу скрипта Main при нажатой кнопке мыши, и прекратить работу всех скриптов при отпускании кнопки. Как это сделать, я объяснял чуть выше, так что просто добавим в конец скрипта Script1 такое условие:

MStatus=MouseLButton()
If (MStatus=0) Then
  mouseup=TRUE
  Return()
End
ScriptTimer("TimerB=Main","50")

На этом работа над скриптом Script1 закончилась. Вот что у нас получилось в итоге:

katX=100-MouseX()
katY=MouseY()-100
tg=katY/katX
If (tg>1) Then
  rot=0
End
If (tg<1) Then
  rot=5
End
If (tg<0.84) Then
  rot=10
End
If (tg<0.7) Then
  rot=15
End
If (tg<0.57) Then
  rot=20
End
If (tg<0.47) Then
  rot=25
End
If (tg<0.37) Then
  rot=30
End
If (tg<0.27) Then
  rot=35
End
If (tg<0.17) Then
  rot=40
End
If (tg<0.08) Then
  rot=45
End
rotate=rot
RotateImageTo("Ручка","rotate")
MStatus=MouseLButton()
If (MStatus=0) Then
  mouseup=TRUE
  Return()
End
ScriptTimer("TimerB=Main","50")

Теперь нажмём кнопку F5 и посмотрим, как работает наш проект. Ручка поворачивается, но пока ещё слишком мало, она двигается только в первой условной зоне. Ведь мы написали только один скрипт из четырех. Переходим ко второй зоне, за которую должен отвечать скрипт Script2. Здесь мы будем рассматривать уже другой треугольник, и соответственно другие катеты (см.рис.):
 


 
В этой зоне значения катетов будут другими. Понятно, что katX равен 100-MouseX(), а katY=100-MouseY(). Начнём без лишних объяснений писать Script2:

katX=100-MouseX()
katY=100-MouseY()
tg=katY/katX

Вычислим чему равен тангенс 50 и получим 0,08. Добавим в Script2 условие:

If (tg>0.08) Then
  rot1=5
End

И так далее, пока не дойдём до значения rot1=900.

Угол поворота во второй зоне будет не просто равен значению rot1, к нему надо прибавить ещё 450. Т.к. при rot1=0 угол общий угол поворота ручки равен 45 градусов. Значит после всех условий запишем:

rotate=(45+rot1)
RotateImageTo("Ручка","rotate")
MStatus=MouseLButton()
If (MStatus=0) Then
  rot1=5
  mouseup=TRUE
  Return()
End
ScriptTimer("TimerB=Main","50")

Для третьей и четвёртой зоны скрипты напишите сами.

После того, как вы это сделаете, регулятор будет вполне работоспособным, но у него обнаружатся два недостатка. Во-первых, при старте проекта он не будет отклоняться на угол, соответствующий уровню громкости в системе, а во-вторых, если вы захватите регулятор мышью и будете тащить его до максимального значения и по достижении его продолжите движение мышью через низ в сторону первой зоны то регулятор проскочит туда и громкость исчезнет, "сорвётся"; то же самое и в обратную сторону. Значит, придётся устранять эти недостатки.

С первым справится несложно. Нужно создать текстовый объект и назвать его CBK_Volume, а в скрипте старта страницы написать такую строчку:

RotateImageTo("Ручка","CBK_Volume*2.7")

И всё. А вот со второй проблемой сложнее, но исправить её возможно. Для начала нам нужно понять, что следует разрешить, а что запретить. Например, для первой зоны можно разрешить работу скрипта, только если мышь пришла из второй зоны, а для второй зоны можно разрешить работу скрипта, только если мышь пришла из третьей или первой зоны, и т.д. Т.е. работу скриптов можно разрешать, только если мышь пришла из соседних зон. Начнём это реализовывать.

Как определить, в какой зоне находится мышь? Да очень просто. Введём какую-нибудь переменную, например q. В Script1 добавим строку q=1, в Script2 - q=2, в Script3 - q=3 и, соответственно, в Script4 - q=4. 

Теперь осталось немного подправить скрипт Main. В условие запуска скрипта Script1 надо добавить дополнительное условие, которое разрешит запустить скрипт, только если мышь пришла из второй зоны. Условие будет выглядеть так: 

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

То же самое проделаем для других условий. Окончательно скрипт Main будет выглядеть так:

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

ВСЁ!!! Теперь запустите проект и - о чудо! - регулятор работает, как будто настоящий!

Ну а если вы так и не смогли разобраться во всех хитросплетениях этого урока, то просто скачайте готовый регулятор с сайта, из раздела "Готовые проекты - Отдельные узлы".

Удачи!


Написать отзыв

Назад 

 

 

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

 





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



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