gpt4 book ai didi

actionscript-3 - 找到满足特定范围的抛物线的角度和速度

转载 作者:行者123 更新时间:2023-12-04 18:12:26 24 4
gpt4 key购买 nike

我有点不好意思问这个问题,但我已经尝试了很多不同的方法,但都无法实现。

我有一个射击子弹的游戏,我已经编写了计算给定角度和速度的抛物线轨迹的代码,但我正在尝试进行微积分以获得到达 X 所需的角度和速度点(用户敌方坦克),我无法让它按我的需要工作。

我当前的代码是:

  var startingPointX:Number = globalCoord.x;
var startingPointY:Number = globalCoord.y;
var targetX:Number = tankPlayer.x;
var targetY:Number = tankPlayer.y;
//distance between user and enemy tank
var distanceTarget = Math.sqrt(( startingPointX - targetX ) * ( startingPointX - targetX ) + ( startingPointY - targetY ) * ( startingPointY - targetY ));
var fixedVel = (distanceTarget/10)*2;
var fixedG = bullet.g;
// launch angle
var o:Number = -(Math.asin((0.5 * Math.atan(fixedG * distanceTarget / fixedVel * fixedVel))) * 180 / Math.PI);
bullet.init(startingPointX, startingPointY, o, fixedVel);

子弹对象中实际将子弹定位在抛物线轨迹中的函数是:

 public function init(x, y:Number, rot:Number, speed:Number) {
// set the start position
var initialMove:Number = 35.0;
this.x = x + initialMove * Math.cos(2 * Math.PI * rot / 360);
this.y = y + initialMove * Math.sin(2 * Math.PI * rot / 360);
this.rotation = rot;

//get speed
dx = speed * Math.cos(2 * Math.PI * rot / 360);
dy = speed * Math.sin(2 * Math.PI * rot / 360);

//animation
lastTime = getTimer();
addEventListener(Event.ENTER_FRAME,moveBullet);


}
public function moveBullet(event:Event)
{
//get the time passed
var timePassed:int = getTimer() - lastTime;
lastTime += timePassed;

//move bullet
dy += g * timePassed / 1000;
this.x += dx * timePassed / 1000;
this.y += dy * timePassed / 1000;

//bullet past the top of the screen
if (this.y < 0)
{
deleteBullet();
}
}

任何帮助都会非常有用,谢谢! :D

问候,阴影。

最佳答案

如果这是一个弹道问题,你从点 Av 的速度以 theta 的角度转换一个粒子,你希望它击中 T 点,其中 AT 的 y 坐标匹配(即它们位于垂直于重力矢量的平面上力向量)然后你可以从这个等式计算出所需的角度和速度(见你的维基链接定义):

 R = (v * v * sin(2 * theta))/g

此处 R 是从起点 A 沿 x 方向移动的距离。您面临的问题是您正试图通过 2 个点插入抛物线。有无限多条抛物线将插值 2 个点,而通过 3 个点的抛物线是唯一的。从本质上讲,速度和角度有无数种选择,因此您可以击中目标。

您需要固定角度或子弹的速度,以便使用上述等式找到您需要的值。否则,您将有无数条抛物线可以击中您的目标。

以上假设空气阻力被忽略。

编辑: 因此,如果您已经知道速度 v,您可以通过对上述内容进行简单的重新排列来获得 theta:

( asin(g * R / (v * v)) ) / 2 = theta

关于actionscript-3 - 找到满足特定范围的抛物线的角度和速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12359012/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com