PDA

Просмотр полной версии : как избавиться от погрешности


as_68
18.07.2005, 11:55
Есть код
stop();
//кнопка "влево"
_root.bl.onRelease = function() {
_root.plays = 1;
_root.x2 = _root.box._x+205;
};
//кнопка "вправо"
_root.br.onRelease = function() {
_root.plays = -1;
_root.x2 = _root.box._x-205;
};
_root.onEnterFrame = function() {
if (_root.plays == 1) {
_root.box._x = _root.x2-(_root.x2-_root.box._x)/2;
} else if (_root.plays == -1) {
_root.box._x = _root.x2+(-_root.x2+_root.box._x)/2;
}
trace(_root.box._x);
};

Посоветуйте, плиз, как избавиться от погрешности перемещения
(т.е. надо чтобы BOX вставал в целые координаты кратные 205, без всяких сотых)
Пробовал Math.floor и Math.ceil, но box._x - может быть и отрицательная.

iNils
18.07.2005, 12:04
around = function (arg) {
if (arg > 0) {
return Math.floor (arg);
} else {
return Math.ceil (arg);
}
};
// пример
trace(around (-205.1842))
trace(around (-205.9842))
trace(around (205.1842))
trace(around (205.9842))

as_68
18.07.2005, 13:07
А не хочет :(
stop();
around = function (arg) {
if (arg > 0) {
return Math.floor (arg);
} else {
return Math.ceil (arg);
}
};
stop();
//кнопка "влево"
_root.bl.onRelease = function() {
_root.plays = 1;
_root.x2 = around(_root.box._x+205);
trace(_root.x2);
};
//кнопка "вправо"
_root.br.onRelease = function() {
_root.plays = -1;
_root.x2 = around(_root.box._x-205);
trace(_root.x2);
};
_root.onEnterFrame = function() {
if (_root.plays == 1) {
_root.box._x = _root.x2-(_root.x2-_root.box._x)/2;
} else if (_root.plays == -1) {
_root.box._x = _root.x2+(-_root.x2+_root.box._x)/2;
}
};

результаты:
205
409
613
407
202

iNils
18.07.2005, 13:19
дай исходник, я не могу понять что у тебя там делается.

as_68
18.07.2005, 13:25
лови исходник

iNils
18.07.2005, 15:54
а понятно. тебе нужно при нажатии не к текущим координатам прибавлять 205, а увеличивать или уменьшать счетчик нажатии. то есть, в самом начале он равен 0, при нажатии влево отнимается 1, а вправо наоборот прибавляется. после умножаешь счетчик на 205, это и будет твоя конечная координата для объекта.

as_68
18.07.2005, 16:30
огромный сенкс :D