2011-12-19 77 views
1

我以为我可以在互联网上找到一些搜索,但我发现的一切只是球从pong或其他任意问题之类的东西跳起来。我正在制作一个二维地牢爬行游戏,当我杀死敌人并且他们放下战利品时,我希望物品飞出去,就好像它刚刚被抛在空中并在单位上的随机点上着陆。C#反弹/丢弃物品物理丢弃

我一直在试图弄清楚自己,但我不明白,这可能会问很多,我会很感激,如果有人能帮助我。

编辑的要求:

玉以及当怪物就会被破坏,我会选择它在砖内的随机位置,我们称之为位置endLoc和怪物的位置startLoc。然后我会觉得这两个位置之间的中心x点和由20减少Y(因为这是我多少像素所需的项目由去了),让我们称这个变量launchLoc:

launchLoc = new Vector2(startLoc.X + ((endLoc.X - startLoc.X)/2), startLoc.Y - 20) 

我想产生正确的Vector。

所以现在我需要从startLoc启动项目到launchLoc,然后让它回到endLoc。这是令人困惑的地方,我不确定如何为此创建一个真实的弧线。最终的结果是物品会沿着高斯移动,就好像它被扔到空中一样。

我试图在每个时间间隔内使速度增加120倍,startLoc和launchLoc之间的X差,增加倍数,但是我无法让它工作得很好。我不确定这是否是最好的方法。我使用第120个,因为y值是20,并且该项目每隔一个间隔向上移动1个像素,所以1至20加起来为120,这将使得x运动不断增加,就像它被抛出一样。

这是在二维btw,我希望有所帮助。

+1

是否存在您遇到麻烦的特定位代码?如果是的话,你可以在这里发布?你是在追求像这样的逻辑如何工作?你能否提供更多细节?没有更多的信息就很难回答这样的问题。 – 2011-12-19 14:32:37

+0

更新了我的文章。 – user1009573 2011-12-19 15:13:23

+0

这是2d,所以你需要模拟它在屏幕上弹出的第三个维度? – scottheckel 2011-12-19 15:23:56

回答

1

您在时间t 0 v(吨))和位置开始以初始速度矢量(p(吨))。重力可以被假定为产生恒定的加速度(一个(吨)= 0 <,-9.8米/秒 >,虽然你的值可能不同),直到对象的土地。所以,从一个时间片要到下一个运动的一般形式是:

p(t) = 0.5*a(0)*(t-t0)2 + v(0)*(t-t0) + p(0) 
v(t) = a(0)*(t-t0) + v(0)

要弄清楚什么时候停止运动,你需要在什么时候该对象的路径相交针对其表面要弄清楚它反弹。您必须为所有可以合理预期的表面执行此操作。因此,对于具有线方程Ux + Vy + T = 0一个平面,你打破了位置矢量到它的组件,如:

p(t) = <px(t), py(t)>
然后使用 quadratic formula找到 tc其中 p(tc)满足直线方程:
0.5*(Uax(t0)+Vay(t0))*tc2 + (Uvx(t0)+Vvy(t0))*tc + (Upx(t0)+Vpy(t0)+T) = 0
之所以选择分支的是T Ç吨。从那里可以很容易地找出物体与表面碰撞的位置。然后,您可以根据反弹的行为更新速度矢量和位置矢量。如果平面轴向对齐(即它是一个法向矢量平行于Z轴的水平平面),则只需翻转速度矢量的Z分量的符号,并将整个速度矢量乘以某个阻尼因子d,其中0 ≤ d < 1阻尼速度。然后重复,直到某个预定的时间已经过去,或者速度达到最小量(您的呼叫)。

随意取向的平面会变得更难一些。您将需要计算碰撞的入射角并反映关于平面法线的速度矢量。我不会在这里详细讨论,因为我怀疑你可能对此不感兴趣。