Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.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
Java 移动平台对象-使用box2D的Android游戏_Java_Android_Box2d_Andengine - Fatal编程技术网

Java 移动平台对象-使用box2D的Android游戏

Java 移动平台对象-使用box2D的Android游戏,java,android,box2d,andengine,Java,Android,Box2d,Andengine,我有一个2D侧滚android游戏正在开发中,使用和引擎 引擎使用BOX2D物理引擎 在我的游戏中,我有一个叫做“移动平台”的物体。这是一个简单的平台,它在右/左方向移动,并根据其当前X坐标不断改变其移动方向。它工作正常,我正在使用: body.setLinearVelocity(-1 * 5, b.getLinearVelocity().y); 现在我的问题是:显然,玩家可能会试图跳到这个移动平台上移动,但不幸的是,如果他不移动这个平台,玩家会摔倒 我试图让它像在大多数平台游戏中一样

我有一个2D侧滚android游戏正在开发中,使用和引擎

引擎使用BOX2D物理引擎

在我的游戏中,我有一个叫做“移动平台”的物体。这是一个简单的平台,它在右/左方向移动,并根据其当前X坐标不断改变其移动方向。它工作正常,我正在使用:

    body.setLinearVelocity(-1 * 5, b.getLinearVelocity().y);
现在我的问题是:显然,玩家可能会试图跳到这个移动平台上移动,但不幸的是,如果他不移动这个平台,玩家会摔倒

我试图让它像在大多数平台游戏中一样,如果玩家在平台上,玩家会自己随平台移动(因此你不会被迫一直呆在这个平台上以避免摔倒)

到目前为止,我已经尝试或一直在考虑:

  • 在contact listener中,检查玩家的身体是否接触平台的身体,如果是,则将当前平台线速度应用于玩家
  • 增加平台的摩擦力

如果到目前为止没有成功,我将非常感谢您的一些想法/提示。谢谢。

如果平台的摩擦系数为1,那么玩家不应该有相对于其速度的相对速度。因此,只需将
1f
设置为移动平台的摩擦场
FixtureDef


如果这不起作用,请确保在创建播放器夹具def时未将密度传递为
0
,因为运动摩擦力的计算方式为:
摩擦力=(摩擦系数)*(法向力)
然后是没有质量的物体(密度=0),在大多数情况下(你的包含在“most”中),不会有摩擦。

你能举一个使用你想要做的事情的游戏的例子吗?谢谢你的回答,例如,看看谷歌上从马里奥游戏中找到的这张图片(忽略那些红色箭头,它的屏幕在谷歌上),你可以看到马里奥目前停留在我称之为移动平台的物体上,因为它在左/右方向移动。我也有,但当玩家待在我的平台上时,他必须继续移动,否则他会摔倒。我原以为你的问题是其他问题,但我认为我的答案现在可以解决你的问题。谢谢你的回答,我按照你说的做了,在创建夹具时在平台摩擦力中设置1f,我的播放器的fixture def是physicFactory.createFixtureDef(0,0,0f);所以就像你说的,不幸的是,它不起作用。我把玩家的摩擦力设定为0.01f,平台的摩擦力设定为非常大的值(50000),事实上它起作用了,玩家一直随着平台移动,但他不能移动(使用控制器),当然他可以在空中跳跃和移动,但它仍然有缺陷。我将尝试找到如何动态改变身体摩擦力的方法,因为如果我将玩家的摩擦力改回0,而玩家可能想用控制器移动,这将是完美的。如果你设置一个小摩擦力,它应该仍然足以让玩家停留在平台上,然而,当玩家移动时,如果你不能使用这种力量,那么就不能用它来否定,你可以考虑用<代码> StEngReloStudio而不是<代码> ApPyRuth使玩家移动。这样,摩擦力不会阻止玩家(它会慢下来,虽然……)。实际上,当玩家移动时,它应该控制它的速度,而不是力(加速度)。我正在使用控制器移动我的玩家,从一开始就使用setLinearVelocity。