0
Answered
Анимация. Повороты
Доброй ночи!
Есть задача поворачивать элемент то влево, то вправо в зависимости от нажатия кнопки слева или справа соответствнно. Планировал реализовать данную функцию при помощи анимации.
Сделал все по инструкции описанной здесь.
Код получился вот такой:
function Turn()
{
var Button1 = IR.GetItem("Page 1").GetItem("Item 2");
var Button2 = IR.GetItem("Page 1").GetItem("Item 3");
var Arrow = IR.GetItem("Page 1").GetItem("Item 1");
IR.AddListener(IR.EVENT_ITEM_PRESS,Button1,function()
{
Animation([Rotate(90)], Arrow, 500, NOT_DELAY, NOT_LOOP, LINEAR);
});
IR.AddListener(IR.EVENT_ITEM_PRESS,Button2,function()
{
Animation([Rotate(-90)], Arrow, 500, NOT_DELAY, NOT_LOOP, LINEAR);
});
}
Есть задача поворачивать элемент то влево, то вправо в зависимости от нажатия кнопки слева или справа соответствнно. Планировал реализовать данную функцию при помощи анимации.
Сделал все по инструкции описанной здесь.
Код получился вот такой:
function Turn()
{
var Button1 = IR.GetItem("Page 1").GetItem("Item 2");
var Button2 = IR.GetItem("Page 1").GetItem("Item 3");
var Arrow = IR.GetItem("Page 1").GetItem("Item 1");
IR.AddListener(IR.EVENT_ITEM_PRESS,Button1,function()
{
Animation([Rotate(90)], Arrow, 500, NOT_DELAY, NOT_LOOP, LINEAR);
});
IR.AddListener(IR.EVENT_ITEM_PRESS,Button2,function()
{
Animation([Rotate(-90)], Arrow, 500, NOT_DELAY, NOT_LOOP, LINEAR);
});
}
Customer support service by UserEcho
Возник другой вопрос.
Точность позиционирования при повороте оставляет желать лучшего. Ошибка до 2 градусов и она накапливается.
2. Вычисления в приложении, имеют небольшую погрешность, что бы этого избежать можно добавить дополнительное принудительное выставление указанного значения, отловив почти момент завершения анимации:
Пример:
if(this.counter >= this.duration - this.step)
this.value = this.change;
Реализация:
Rotate = function(in_change){
return function(){
this.change = in_change;
this.first = 0;
return function(i){
// Принудительное выставления максимального значения, для устранения погрешности
if(this.counter >= this.duration - this.step)
this.value = this.change;
this.item[i]["Angle"] = this.value;
}
}
1. По вопросу первому, тут скорее была проблема в организации кода.
Вы выполняете подписку на нажатия элементов внутри вызова функции. Обратите внимание на то, что подписка будет происходить каждый раз, при вызове Turn. Т.е. после двух вызовов, указанные функции, будут подписаны дважды и выполнять будут дважды. Верно было бы подписать функции на событии только один раз, например при событии START.
var Turn_1 = new Turn();
Спасибо большое!
http://www.youtube.com/watch?v=Q2fpY9Yjtfc