Есть код, где при нажатой клавише создается перевернутый объект, и при отпущенной клавише возвращается прежний. Только вот при возврате, объект как будто подпрыгивает. Уже все перерыл, не могу понять в чем дело. Вроде вычисление правильные: берем Y и плюсуем 40 px и обратно минусуем, разница между центром двух объектов ровно 40.

Код AS3:
package{
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.net.*;
import flash.text.*;
import flash.utils.*
import com.actionsnippet.qbox.*;
import Box2D.*;
public class test extends Sprite{
var sim:QuickBox2D;
private var hero:QuickObject;
var bol:Boolean =false;
public function test() {
this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}
public function onAddedToStage(e: Event): void {
removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
sim = new QuickBox2D(con);
sim.addBox({x:447/30, y:622.5/30, width:910/30, height:37/30, density:0});
hero = sim.addBox({x:300/30, y:529/30, width:89.8/30, height:150/30, density:0.07,allowSleep:false,restitution:0.0,fixedRotation:true});
stage.addEventListener(KeyboardEvent.KEY_DOWN,onKeyPressed);
stage.addEventListener(KeyboardEvent.KEY_UP, onKeyReleased);
sim.start();
}
function onKeyPressed(evt:KeyboardEvent):void {
if(!bol){
bol = true
var ySave:Number = hero.y+(40/30);
hero.destroy();
hero = sim.addBox({x:300/30, y:ySave, width:118/30, height:70/30, density:0.07,allowSleep:false,restitution:0.0,fixedRotation:true});
}
}
function onKeyReleased(evt:KeyboardEvent):void {
if(bol){
bol = false
var ySave:Number = hero.y-(40/30);
hero.destroy()
hero = sim.addBox({x:300/30, y:ySave, width:89.8/30, height:150/30, density:0.07,allowSleep:false,restitution:0.0,fixedRotation:true});
}
}
}
}