как реализовать поведение HOVER в Matter.js? - PullRequest
1 голос
/ 20 марта 2019

Мне было интересно, знает ли кто-нибудь, как реализовать эффект наведения с помощью Matter.js . Я проверил их документацию, но не смог выяснить. Хотя есть мышь - mousedown, mouseup, mousemove и more .

Я исследовал, но не смог найти никакой полезной информации. Я знаю, что формы / физика отображаются внутри холста. Любая информация или совет будут очень полезны.

Ответы [ 2 ]

1 голос
/ 04 апреля 2019

Я нашел способ реализовать поведение при наведении курсора. Для этого я использовал метод Matter.Query.point и «mousemove» (Matter.Events.on). Спасибо за @ philipp выше, что указали мне правильное направление. Вот простой код.

//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

});

Удачного кодирования! :)

1 голос
/ 20 марта 2019

Если вы хотите найти тело, находящееся ниже мыши / заданной точки, вы можете использовать

Matter.Query.point

документы.

Если выхочу, чтобы Body hover:

Я однажды создал эффект наведения с помощью Box2d, но я думаю, что это может быть сделано так же, как в деле .js.Просто взгляните на рисунок ниже.

    ^
    |      <-- Force opposite to gravity
+---|---+
|   +   |  <-- Box/player/body
+-+-+-+-+
| | | | |  <-- Rays
  | | |
----+----- <-- Ground to hover on
    |

Чтобы тело зависло, вам нужно приложить к нему силу, противоположную гравитации.Поэтому вам необходимо выяснить, насколько сильной должна быть эта сила, которая должна быть равна нулю, если тело находится выше высоты для зависания и должно становиться сильнее по мере приближения тела к земле.

Чтобы получить эту информациюВы можете использовать лучевое излучение и отправить один или несколько лучей от тела к земле (противоположно гравитации).В случае, если луч (ы) пересекаются с полом / землей для зависания, вы можете рассчитать длину от тела до пересечения.Если длина больше высоты для зависания, сила может быть установлена ​​на ноль, если она равна или меньше, вы можете масштабировать силу в некоторой инвертированной пропорции к длине, чтобы она была сильной, когда тело низкое.Точный метод / функция зависит от эффекта, которого вы пытаетесь достичь.

Когда я это сделал, я рассчитал около 10 лучей и использовал среднее из них, так что тело смогло «подняться» *

Вы можете посмотреть здесь , где я искал помощи, когда я сделал это.

Здесь является отличным учебником об этом, к сожалению, в Box2d,но физика сама по себе не должна быть другой.

...