Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何基于力沿弯曲路径移动图元?_Javascript_Jquery_Html_Animation - Fatal编程技术网

Javascript 如何基于力沿弯曲路径移动图元?

Javascript 如何基于力沿弯曲路径移动图元?,javascript,jquery,html,animation,Javascript,Jquery,Html,Animation,EDIT:我在Decker的link()中深入研究了文档非常丰富的源代码,我很有信心我能在那里找到一些代码。谢谢大家的帮助:D 我正在用javascript编写一个游戏的运动。左右箭头键旋转宇宙飞船的图像,而向上箭头键使其加速。使用旋转度和速度,我可以用Math.sin()和Math.cos()计算x和y的运动,但这意味着船像汽车一样操纵。考虑到它应该在太空中,我想让飞船的旋转只影响它加速时的路径,并考虑飞船当前的运动 我把它弄得乱七八糟,试着把运动分成两种不同的力量,当前的方向和速度,以及想要

EDIT:我在Decker的link()中深入研究了文档非常丰富的源代码,我很有信心我能在那里找到一些代码。谢谢大家的帮助:D

我正在用javascript编写一个游戏的运动。左右箭头键旋转宇宙飞船的图像,而向上箭头键使其加速。使用旋转度和速度,我可以用
Math.sin()
Math.cos()
计算
x
y
的运动,但这意味着船像汽车一样操纵。考虑到它应该在太空中,我想让飞船的旋转只影响它加速时的路径,并考虑飞船当前的运动

我把它弄得乱七八糟,试着把运动分成两种不同的力量,当前的方向和速度,以及想要的方向,但似乎没有什么能接近它的感觉

抱歉,如果这让人困惑,以下是原始移动的简化代码:

function main()
{
if(keyStates[39]) // Right arrow pressed?
    ship.deg+=8; 
if(keyStates[37]) // Left arrow pressed? 
    ship.deg-=8; 
if(keyStates[38]) // Up arrow pressed?
{
    if(ship.speed<16)
        ship.speed+=1;
}
var shift=getXYshift(ship.deg,ship.speed);
function getXYshift(deg,speed)
{
    return {x:Math.round(Math.cos((90-deg)*Math.PI/180)*speed*-1), y:Math.round(Math.sin((90-deg)*Math.PI/180)*speed)};
}
setTimeout(function(){ main() }, 50);
}
函数main()
{
if(keyStates[39])//右箭头按下了吗?
船度+=8;
如果(keyStates[37])//按下左箭头?
船度-=8;
如果(keyStates[38])//按下向上箭头键?
{

如果(ship.speed在按下右/左箭头后是否使用getXYshift?您应该只在按下向上箭头时使用它。这样,您的飞船将在任何方向上都不会加速的情况下旋转。只在按下向上箭头键时更改速度,不按下时减速。不要使用右/左键更改速度,使用它们来更改速度e船舶的旋转。

在按下右/左箭头后是否使用getXYshift?您应该只在按下向上箭头时使用它。这样,船舶将在任何方向上旋转而不加速。只在按下向上箭头键时更改速度,不按下时减速。不要使用右/左箭头键更改速度ys,使用它们来更改船舶的旋转。

您可以使用一个矢量来跟踪船舶的速度和方向,并通过检查用于跟踪船舶当前角度的第二个矢量的角度,在按下向上箭头时更改该矢量的方向

我推荐这本书,它详细解释了向量的用法,还有更多


您还可以查看其中一本书的源代码示例,其中有一个矢量处理对象,可能对您有用。

您可以使用一个矢量来跟踪船舶的速度和方向,并在按下向上箭头时,通过检查用于跟踪速度和方向的第二个矢量的角度来改变该矢量的方向e船舶当前角度

我推荐这本书,它详细解释了向量的用法,还有更多


您也可以在这里查看其中一本书的源代码示例,其中有一个向量处理对象,可以证明对您有用。

您应该使用一个称为“向量”的数学概念来进行运动。向量只是一个力和一个方向。该向量将应用于船舶的X,Y坐标(忽略其方向)确定绘制船舶的位置时的每一帧。当您加速时,您将使用船舶面对的方向和指定给加速度的常量值来形成一个向量,该向量可应用于您的运动向量,以计算其对速度的影响

下面是对vectors的快速介绍:,在观看视频后,你应该对需要查找的内容有一个很好的了解。从那里,谷歌应该是你的朋友

编辑:当我在上面说:“你将使用船面对的方向和一个指定给加速度的常量值来形成一个向量,可以应用到你的运动向量上,以计算它对速度的影响。”我指的是向量代数。如果你决定使用向量来解决你的问题,你将需要使用向量加法的概念来加速。当你按下箭头键时,你将生成一个大小为m的向量(其中m可以是任何实数,表示你要加速的速度)和一个方向d(此值很可能与船舶所面对的方向相对应)。然后将此新矢量添加到船舶当前矢量,以在应用当前帧的加速度后获得船舶新矢量。您可以在此处阅读更多内容:


干杯和快乐编码

你应该使用一个被称为“矢量”的数学概念来进行运动。矢量只是一个力和一个方向。该矢量将应用于你船的X,Y坐标(忽略其方向)确定绘制船舶位置时的每一帧。当您加速时,您将使用船舶面对的方向和指定给加速度的常量值来形成一个向量,该向量可应用于您的运动向量,以计算其对速度的影响

下面是对vectors的快速介绍:,在观看视频后,你应该对需要查找的内容有一个很好的了解。从那里,谷歌应该是你的朋友

编辑:当我在上面说:“你将使用船面对的方向和一个指定给加速度的常量值来形成一个向量,可以应用到你的运动向量上,以计算它对速度的影响。”我指的是向量代数。如果你决定使用向量来解决你的问题,你将需要使用向量加法的概念来加速。当你按下箭头键时,你将生成一个大小为m的向量(其中m可以是任何实数,表示你要加速的速度)和一个方向d(此值很可能与船舶所面对的方向相对应)。然后将此新矢量添加到船舶当前矢量,以在应用当前帧的加速度后获得船舶新矢量。您可以
ship = {
   coordinates: [0, 0], // space units
   orientation: 0, // radiant
   speed: [0, 0], // space units / time frame
   rotation: 0 // radiant / time fram
}
function animatestep {
   coordinates[0] += speed[0];
   coordinates[1] += speed[1];
   orientation += rotation;
}
onaccelerate = function {
   speed[0] += cos(orientation) * acceleration;
   speed[1] += sin(orientation) * acceleration;
}
onleft = function {
   rotation++;
}
onright = function {
   rotation--;
}