Javascript 如何在Matter.js中实现悬停行为?

Javascript 如何在Matter.js中实现悬停行为?,javascript,matter.js,Javascript,Matter.js,我想知道是否有人知道如何使用实现悬停效果。我查阅了他们的文件,但没有弄清楚。尽管如此,还是有Mouse-mousedown、mouseup、mousemove和mousemove 我已经研究过了,但找不到任何有用的信息。我知道图形/物理是在画布内渲染的。任何信息或建议都会非常有用 如果要查找鼠标/给定点下方的实体,可以使用 Matter.Query.point 如果要使主体悬停: 我曾经使用Box2d创建过悬停效果,但我想在matter.js中也可以使用同样的方法。请看下面的插图 ^

我想知道是否有人知道如何使用实现悬停效果。我查阅了他们的文件,但没有弄清楚。尽管如此,还是有Mouse-mousedown、mouseup、mousemove和mousemove


我已经研究过了,但找不到任何有用的信息。我知道图形/物理是在画布内渲染的。任何信息或建议都会非常有用

如果要查找鼠标/给定点下方的实体,可以使用

Matter.Query.point
如果要使主体悬停:

我曾经使用Box2d创建过悬停效果,但我想在matter.js中也可以使用同样的方法。请看下面的插图

    ^
    |      <-- Force opposite to gravity
+---|---+
|   +   |  <-- Box/player/body
+-+-+-+-+
| | | | |  <-- Rays
  | | |
----+----- <-- Ground to hover on
    |
要使物体悬停,你需要对它施加一个与重力相反的力。因此,你需要计算出这个力需要有多大,如果物体在悬停高度以上,这个力应该是零,并且物体离地面越近,这个力应该越强

要获得此信息,可以使用光线投射,并将一条或多条光线从身体发送到与重力相反的地面。如果光线与要悬停的地板/地面相交,则可以计算从主体到相交点的长度。如果长度大于悬停高度,则可以将力设置为零;如果长度等于或小于,则可以将力按与长度成反比的比例缩放,以便在身体较低时力较强。确切的方法/功能取决于您试图达到的效果

当我这样做的时候,我计算了大约10条射线,并使用它们的平均值,这样身体就能够“爬”

你可以看看我做这件事时在哪里寻求帮助


不幸的是,在Box2d中,这是一个很好的教程,但它们本身的物理性质应该不会有什么不同。

如果您想找到鼠标/给定点下方的身体,可以使用

Matter.Query.point
如果要使主体悬停:

我曾经使用Box2d创建过悬停效果,但我想在matter.js中也可以使用同样的方法。请看下面的插图

    ^
    |      <-- Force opposite to gravity
+---|---+
|   +   |  <-- Box/player/body
+-+-+-+-+
| | | | |  <-- Rays
  | | |
----+----- <-- Ground to hover on
    |
要使物体悬停,你需要对它施加一个与重力相反的力。因此,你需要计算出这个力需要有多大,如果物体在悬停高度以上,这个力应该是零,并且物体离地面越近,这个力应该越强

要获得此信息,可以使用光线投射,并将一条或多条光线从身体发送到与重力相反的地面。如果光线与要悬停的地板/地面相交,则可以计算从主体到相交点的长度。如果长度大于悬停高度,则可以将力设置为零;如果长度等于或小于,则可以将力按与长度成反比的比例缩放,以便在身体较低时力较强。确切的方法/功能取决于您试图达到的效果

当我这样做的时候,我计算了大约10条射线,并使用它们的平均值,这样身体就能够“爬”

你可以看看我做这件事时在哪里寻求帮助


不幸的是,在Box2d中,这是一个很好的教程,但它们本身的物理特性应该不会有什么不同。

我已经找到了实现悬停行为的方法。为此,我使用Matter.Query.point和mousemoveimatter.Events.on方法。感谢上面为我指出了正确的方向。下面是简单的代码

//Need to add MouseConstraint for mouse events
 var mConstraint;
 mConstraint = MouseConstraint.create(engine, options);
 Matter.World.add(world, mConstraint);

//Add event with 'mousemove'
Matter.Events.on(mConstraint, 'mousemove', function (event) {
   //For Matter.Query.point pass "array of bodies" and "mouse position"
   var foundPhysics = Matter.Query.point(bodies, event.mouse.position);

  //Your custom code here
  console.log(foundPhysics[0]); //returns a shape corrisponding to the mouse position

});

快乐编码!:

我已经找到了实现悬停行为的方法。为此,我使用Matter.Query.point和mousemoveimatter.Events.on方法。感谢上面为我指出了正确的方向。下面是简单的代码

//Need to add MouseConstraint for mouse events
 var mConstraint;
 mConstraint = MouseConstraint.create(engine, options);
 Matter.World.add(world, mConstraint);

//Add event with 'mousemove'
Matter.Events.on(mConstraint, 'mousemove', function (event) {
   //For Matter.Query.point pass "array of bodies" and "mouse position"
   var foundPhysics = Matter.Query.point(bodies, event.mouse.position);

  //Your custom code here
  console.log(foundPhysics[0]); //returns a shape corrisponding to the mouse position

});
快乐编码!: