AS3中炮弹轨迹的速度计算问题求助
解决抛射物准确命中目标的抛体运动问题
你的问题核心是未使用正确的抛体运动公式计算初速度,同时角度计算参数顺序错误,导致轨迹偏差。以下是修正方案:
代码问题分析
- 角度计算错误:
Math.atan2的参数顺序应为(竖直位移差, 水平位移差),你写反了参数,导致角度完全偏离正确方向。 - 初速度计算逻辑错误:原
proj.xVel的公式未考虑重力对竖直方向位移的影响,无法保证抛射物在重力作用下刚好落到目标点。
修正后的代码
var gravity:Number = .25; addEventListener(Event.ENTER_FRAME, promov); function promov(event:Event):void { if (ingame) { if (firepressed) { proj.yVel = 0; pos = new Point(coor.x, coor.y); projpos = new Point(proj.x, proj.y); // 计算起点到目标的水平、竖直位移差 var dx:Number = pos.x - projpos.x; var dy:Number = pos.y - projpos.y; // 设定飞行总帧数(和你原代码的/30对应,可根据需求调整) var flightFrames:Number = 30; // 水平初速度:匀速运动,直接用水平位移除以总帧数 proj.xVel = dx / flightFrames; // 竖直初速度:根据抛体运动公式推导,抵消重力影响后刚好到达目标y坐标 proj.yVel = (dy - 0.5 * gravity * flightFrames * flightFrames) / flightFrames; proj.shot = true; // 标记抛射物已发射 firepressed = false; } if (proj.shot) { proj.x += proj.xVel; proj.y += proj.yVel; proj.yVel += gravity; } } }
原理说明
抛体运动中,水平方向不受力,速度保持匀速;竖直方向受重力影响,位移遵循公式:竖直位移 = 初速度×时间 + 0.5×重力加速度×时间²
我们通过固定飞行时间(这里设为30帧),反推出:
- 水平初速度 = 水平位移 / 飞行时间
- 竖直初速度 = (竖直位移 - 0.5×重力×时间²) / 时间
这样计算出的初速度,能保证抛射物在指定时间内刚好到达目标坐标,完全消除轨迹偏差。
内容的提问来源于stack exchange,提问作者Koden
相关产品推荐
相关产品推荐

