Как вы говорите, это может быть проблемой из-за точности с плавающей запятой. Я просто поместил ваш код в пустой проект Flash, используя только переменные вместо позиционных свойств любого фактического объекта, и ваш код работал нормально - значение diff достигло менее 0,05, и код перестал выполняться.
Затем я попробовал с объектом на сцене, использовал его значение x и столкнулся с проблемой, которую вы описали. Кажется, что одним из простых решений является использование объекта типа Number для выполнения вычислений, а затем в конце оператора установите значение x вашего объекта равным переменной. Я вставил код, который использовал ниже, где «box» - это объект, который я положил на сцену:
addEventListener(Event.ENTER_FRAME, onEnterFrame);
var someX:Number = 0;
var _targetX:Number = -1360;
function onEnterFrame(e:Event):void
{
var diff:Number;
// position map/tree
if (someX != _targetX)
{
diff = _targetX - someX; // get the difference
someX += diff * 0.2; // tween x position
trace("diff= ", diff, " x= ", someX);
diff = diff < 0 ? -diff : diff; // get absolute value
//You could equally use diff = abs(diff); here
if (diff < 0.05)
{
trace("target reached; x set to targetX");
someX = _targetX;
}
box.x = someX;
}
}
Надеюсь, это поможет.