我正在模拟飞行箭头,但它看起来并不自然。
这是一个截图:
箭头动画片段的锚点就像你可以看到的那样位于箭头的前面,但是如果我把它替换到中间,它仍然看起来并不完美,有没有人有这样的经历?
这里也是我的代码:
//...
//'math' isn't the default 'Math' class, it calculates some physics stuff.
private function updateArrow()
{
var y0:Number = 50;
var v:Number = 100;
var angle:Number = math.getRadians(45);
if(!arrowstartposition)
{
arrowstartposition = activearrow.x;
arrowdistance = math.calcDistance(y0,v,angle);
}
var currentdistance:Number = Math.abs(activearrow.x - arrowstart);
if(currentdistance <= arrowdistance)
{
var currentvelocity:Number = math.calcVelocity(currentdistance, v, angle);
var addvalue:int = 1; //Math.round(currentvelocity / 4);
activearrow.x += addvalue;
currentdistance += addvalue;
var arrowheight:Number = math.calcHeight(currentdistance,y0,v,angle);
var vx:Number = v * Math.cos(angle);
var vy:Number = - (v * Math.sin(angle) - 9.81 * (currentdistance / arrowdistance) * math.calcTimeOfFlight(y0, v, angle));
var currentangle:Number = Math.atan2(vy,vx);
activearrow.y = y0 - arrowheight;
activearrow.rotation = math.getDegrees(currentangle);
}
else
{
arrowstart = undefined;
arrowdistance = undefined;
activearrow = null;
}
}
答案 0 :(得分:2)
我认为你的重心已关闭。箭头不会是箭头的重力中心。否则它不会飞得很好。箭头的重心将与飞行的抛物线相切。因此它将围绕该重心旋转。尝试将它更多地移向箭头的中心,它将开始看起来更自然。如果你还有问题。尝试扔一块石头,让它看起来很自然。然后在箭头中添加回来。如果它看起来像石头一样好,那么看起来很糟糕,你知道动作是正确的,但是箭头已经关闭了。