Проверить Matter.js
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

111 Zeilen
3.0KB

  1. мир.игрок = {
  2. задано: {},
  3. обновить: function() {
  4. переместитьИгрока();
  5. задатьИгрокуМаскуСтолкновения();
  6. },
  7. ограничитель: null,
  8. };
  9. // // // //
  10. мир.ключники.push(function(ключ, путь, значение){
  11. if (!ключ.startsWith("игрок"))
  12. {
  13. return;
  14. }
  15. var свойство = путь.slice(1).join(".");
  16. мир.игрок.задано[свойство] = значение;
  17. одинРазСоздатьОграничитель();
  18. });
  19. // // // //
  20. function одинРазСоздатьОграничитель()
  21. {
  22. if (мир.игрок.ограничитель)
  23. {
  24. return;
  25. }
  26. var игрок = мир.объекты.тела["игрок"];
  27. var объект = мир.объекты.тела["колобок"];
  28. if (!игрок || !объект)
  29. {
  30. return;
  31. }
  32. мир.игрок.ограничитель = Matter.Constraint.create({
  33. bodyA: игрок,
  34. bodyB: объект,
  35. stiffness: 1,
  36. });
  37. Matter.Composite.add(мир.физика.движок.world, мир.игрок.ограничитель);
  38. console.debug("создан ограничитель");
  39. }
  40. // // // //
  41. function переместитьИгрока()
  42. {
  43. //var тело = мир.объекты.тела[мир.игрок.задано.объект];
  44. var тело = мир.объекты.тела["игрок"];
  45. if (!тело)
  46. {
  47. return;
  48. }
  49. var к = [
  50. мир.игрок.задано["клавиши.0"],
  51. мир.игрок.задано["клавиши.1"],
  52. мир.игрок.задано["клавиши.2"],
  53. ];
  54. var влево = (мир.ввод.клавиши[к[0]] == true);
  55. var вправо = (мир.ввод.клавиши[к[1]] == true);
  56. var вверх = (мир.ввод.клавиши[к[2]] == true);
  57. var скоростьГ = мир.игрок.задано["скорость.0"];
  58. var скоростьВ = мир.игрок.задано["скорость.1"];
  59. var скоростьY = (вверх && Math.abs(тело.velocity.y) <= 0.00001) ? -скоростьВ : тело.velocity.y;
  60. var скоростьX = 0;
  61. if (влево)
  62. {
  63. скоростьX = -скоростьГ;
  64. }
  65. else if (вправо)
  66. {
  67. скоростьX = скоростьГ;
  68. }
  69. Matter.Sleeping.set(тело, false);
  70. Matter.Body.setVelocity(тело, { x: скоростьX, y: скоростьY });
  71. }
  72. // // // //
  73. function задатьИгрокуМаскуСтолкновения()
  74. {
  75. //var тело = мир.объекты.тела[мир.игрок.задано.объект];
  76. var тело = мир.объекты.тела["игрок"];
  77. if (!тело)
  78. {
  79. return;
  80. }
  81. var прыжок = тело.velocity.y < -1;
  82. var маска = прыжок ? 1 : (1 | 2);
  83. тело.collisionFilter.mask = маска;
  84. }