You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AS3中炮弹轨迹的速度计算问题求助

解决抛射物准确命中目标的抛体运动问题

你的问题核心是未使用正确的抛体运动公式计算初速度,同时角度计算参数顺序错误,导致轨迹偏差。以下是修正方案:

代码问题分析

  1. 角度计算错误:Math.atan2的参数顺序应为(竖直位移差, 水平位移差),你写反了参数,导致角度完全偏离正确方向。
  2. 初速度计算逻辑错误:原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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 08:38:13