Actionscript 3 在给定角度和功率的情况下发射射弹

Actionscript 3 在给定角度和功率的情况下发射射弹,actionscript-3,math,projection,game-physics,Actionscript 3,Math,Projection,Game Physics,我正在做一个原型游戏,比如《虫子》,我不仅想射击,还想看到整个投影曲线,我的射击将在落地前移动。玩家给出的唯一信息是角度和力量。还有一些水平元素,如风和重力 能给我一个投影曲线的代码吗?我想它就像一条抛物线。我研究过抛物线,但我很难将这些数学公式应用到编程代码中 谢谢。数学(和物理)部分 这对我来说就像是十年级的物理课 抛射体的路径(如你所说)是一个可以用方程描述的帕博拉 现在,如果你解这个方程,你会得到以下参数: 范围: 高度: (vi=初始速度,θi=水平方向的初始射击角度) 并且,(x,

我正在做一个原型游戏,比如《虫子》,我不仅想射击,还想看到整个投影曲线,我的射击将在落地前移动。玩家给出的唯一信息是角度和力量。还有一些水平元素,如风和重力

能给我一个投影曲线的代码吗?我想它就像一条抛物线。我研究过抛物线,但我很难将这些数学公式应用到编程代码中

谢谢。

数学(和物理)部分

这对我来说就像是十年级的物理课

抛射体的路径(如你所说)是一个可以用方程描述的帕博拉

现在,如果你解这个方程,你会得到以下参数:

范围:

高度:

(vi=初始速度,θi=水平方向的初始射击角度)

并且,
(x,y)
中抛物线路径的方程将为

(v0=初始速度,θ=点火角)

编程部分

假设以下常数:

const g:Number = 9.81; //9.81 m/s, the grav const
sin函数可用作
Math.sin

电源功能可通过
Math.pow
获得。这意味着,正弦平方

Math.pow(Math.sin(theta), 2)
您可以将范围函数编写为

function projectileRange(vel:Number, angle:Number):Number {
    var vsquare:Number = vel * vel;
    var rv:Number = vsquare * Math.sin(2 * angle) / g;
    return rv;
}
function projectileHeight(vel:Number, angle:Number):Number {
    var vsquare:Number = vel * vel;
    var rv:Number = vsquare * Math.pow(Math.sin(angle), 2) / (2 * g);
    return rv;
}
function yPosition(xPos:Number, vel:Number, angle:Number):Number {
    return xPos * Math.tan(angle) - (g * xPos * xPos / (2 * vel * vel * Math.cos(angle) * Math.cos(angle)));
}
高度的函数是

function projectileRange(vel:Number, angle:Number):Number {
    var vsquare:Number = vel * vel;
    var rv:Number = vsquare * Math.sin(2 * angle) / g;
    return rv;
}
function projectileHeight(vel:Number, angle:Number):Number {
    var vsquare:Number = vel * vel;
    var rv:Number = vsquare * Math.pow(Math.sin(angle), 2) / (2 * g);
    return rv;
}
function yPosition(xPos:Number, vel:Number, angle:Number):Number {
    return xPos * Math.tan(angle) - (g * xPos * xPos / (2 * vel * vel * Math.cos(angle) * Math.cos(angle)));
}
位置函数为

function projectileRange(vel:Number, angle:Number):Number {
    var vsquare:Number = vel * vel;
    var rv:Number = vsquare * Math.sin(2 * angle) / g;
    return rv;
}
function projectileHeight(vel:Number, angle:Number):Number {
    var vsquare:Number = vel * vel;
    var rv:Number = vsquare * Math.pow(Math.sin(angle), 2) / (2 * g);
    return rv;
}
function yPosition(xPos:Number, vel:Number, angle:Number):Number {
    return xPos * Math.tan(angle) - (g * xPos * xPos / (2 * vel * vel * Math.cos(angle) * Math.cos(angle)));
}
请注意,角度以弧度为单位

function toRadians(degrees:Number):void {
    return degrees * Math.PI / 180;
}
有关弹丸运动的更多信息,请参阅数学(和物理)部分

这对我来说就像是十年级的物理课

抛射体的路径(如你所说)是一个可以用方程描述的帕博拉

现在,如果你解这个方程,你会得到以下参数:

范围:

高度:

(vi=初始速度,θi=水平方向的初始射击角度)

并且,
(x,y)
中抛物线路径的方程将为

(v0=初始速度,θ=点火角)

编程部分

假设以下常数:

const g:Number = 9.81; //9.81 m/s, the grav const
sin函数可用作
Math.sin

电源功能可通过
Math.pow
获得。这意味着,正弦平方

Math.pow(Math.sin(theta), 2)
您可以将范围函数编写为

function projectileRange(vel:Number, angle:Number):Number {
    var vsquare:Number = vel * vel;
    var rv:Number = vsquare * Math.sin(2 * angle) / g;
    return rv;
}
function projectileHeight(vel:Number, angle:Number):Number {
    var vsquare:Number = vel * vel;
    var rv:Number = vsquare * Math.pow(Math.sin(angle), 2) / (2 * g);
    return rv;
}
function yPosition(xPos:Number, vel:Number, angle:Number):Number {
    return xPos * Math.tan(angle) - (g * xPos * xPos / (2 * vel * vel * Math.cos(angle) * Math.cos(angle)));
}
高度的函数是

function projectileRange(vel:Number, angle:Number):Number {
    var vsquare:Number = vel * vel;
    var rv:Number = vsquare * Math.sin(2 * angle) / g;
    return rv;
}
function projectileHeight(vel:Number, angle:Number):Number {
    var vsquare:Number = vel * vel;
    var rv:Number = vsquare * Math.pow(Math.sin(angle), 2) / (2 * g);
    return rv;
}
function yPosition(xPos:Number, vel:Number, angle:Number):Number {
    return xPos * Math.tan(angle) - (g * xPos * xPos / (2 * vel * vel * Math.cos(angle) * Math.cos(angle)));
}
位置函数为

function projectileRange(vel:Number, angle:Number):Number {
    var vsquare:Number = vel * vel;
    var rv:Number = vsquare * Math.sin(2 * angle) / g;
    return rv;
}
function projectileHeight(vel:Number, angle:Number):Number {
    var vsquare:Number = vel * vel;
    var rv:Number = vsquare * Math.pow(Math.sin(angle), 2) / (2 * g);
    return rv;
}
function yPosition(xPos:Number, vel:Number, angle:Number):Number {
    return xPos * Math.tan(angle) - (g * xPos * xPos / (2 * vel * vel * Math.cos(angle) * Math.cos(angle)));
}
请注意,角度以弧度为单位

function toRadians(degrees:Number):void {
    return degrees * Math.PI / 180;
}

有关抛射运动的更多信息,请参阅。

欢迎访问。到目前为止,您尝试了什么?另外,请花一些时间通读。这似乎更像是“为我做我的工作”类型的问题,而不是“我的代码出了什么问题”的问题。阅读这篇文章,你会发现这样的问题并不是很受欢迎。尽管如此,我在下面写了一个答案,很快就会准备好的。如果我问了一些不受欢迎的问题,我向大家道歉。我没有这方面的代码,因为我不知道怎么做。我曾尝试以一种非常简单的方式应用公式“y=ax^2+bx+c”,试图绘制抛物线的3个点,但没有成功。如果你坚持的话,我可以把它放在我的帖子里。但我想这就像什么都没有一样。抱歉,谢谢您的反馈。我尽了最大的努力。看起来最简单的方法是保持x的增量为5px,然后找到每个x坐标的y坐标,然后用直线将它们连接起来。我相信这应该很简单,欢迎光临。到目前为止,您尝试了什么?另外,请花一些时间通读。这似乎更像是“为我做我的工作”类型的问题,而不是“我的代码出了什么问题”的问题。阅读这篇文章,你会发现这样的问题并不是很受欢迎。尽管如此,我在下面写了一个答案,很快就会准备好的。如果我问了一些不受欢迎的问题,我向大家道歉。我没有这方面的代码,因为我不知道怎么做。我曾尝试以一种非常简单的方式应用公式“y=ax^2+bx+c”,试图绘制抛物线的3个点,但没有成功。如果你坚持的话,我可以把它放在我的帖子里。但我想这就像什么都没有一样。抱歉,谢谢您的反馈。我尽了最大的努力。看起来最简单的方法是保持x的增量为5px,然后找到每个x坐标的y坐标,然后用直线将它们连接起来。我相信这应该足够简单