Проверить Matter.js
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

400.столкновения.js 1.8KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. мир.столкновения = {
  2. задано: {},
  3. };
  4. // // // //
  5. мир.ключники.push(function(ключ, путь, значение){
  6. if (!путь[0].startsWith("столкновения"))
  7. {
  8. return;
  9. }
  10. var имя = путь[1];
  11. var свойство = путь.slice(2).join(".");
  12. if (!мир.столкновения.задано[имя])
  13. {
  14. мир.столкновения.задано[имя] = {};
  15. }
  16. мир.столкновения.задано[имя][свойство] = значение;
  17. });
  18. // // // //
  19. мир.столкновения.создать = function()
  20. {
  21. Matter.Events.on(мир.физика.движок, "collisionActive", мир.столкновения.обработать);
  22. };
  23. // // // //
  24. мир.столкновения.обработать = function(событие)
  25. {
  26. var за = мир.столкновения.задано;
  27. for (var имя in за)
  28. {
  29. var ст = за[имя];
  30. var имя1 = ст["объекты.0"];
  31. var имя2 = ст["объекты.1"];
  32. if (!имя1 || !имя2 || !ст.событие)
  33. {
  34. continue;
  35. }
  36. var пары = событие.pairs;
  37. for (var номер in пары)
  38. {
  39. var пара = пары[номер];
  40. var п1 = мир.объекты.имена[пара.bodyA.id];
  41. var п2 = мир.объекты.имена[пара.bodyB.id];
  42. if (
  43. !((имя1 == п1) && (имя2 == п2)) &&
  44. !((имя1 == п2) && (имя2 == п1))
  45. ) {
  46. continue;
  47. }
  48. мир.события.уведомить(ст.событие);
  49. }
  50. }
  51. };