Проверить Matter.js
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

77 lines
2.1KB

  1. мир.игрок = {
  2. задано: {},
  3. обновить: function() {
  4. переместитьИгрока();
  5. задатьИгрокуМаскуСтолкновения();
  6. },
  7. };
  8. // // // //
  9. мир.ключники.push(function(ключ, путь, значение){
  10. if (!ключ.startsWith("игрок"))
  11. {
  12. return;
  13. }
  14. var свойство = путь.slice(1).join(".");
  15. мир.игрок.задано[свойство] = значение;
  16. });
  17. // // // //
  18. function переместитьИгрока()
  19. {
  20. var тело = мир.объекты.тела[мир.игрок.задано.объект];
  21. if (!тело)
  22. {
  23. return;
  24. }
  25. var к = [
  26. мир.игрок.задано["клавиши.0"],
  27. мир.игрок.задано["клавиши.1"],
  28. мир.игрок.задано["клавиши.2"],
  29. ];
  30. var влево = (мир.ввод.клавиши[к[0]] == true);
  31. var вправо = (мир.ввод.клавиши[к[1]] == true);
  32. var вверх = (мир.ввод.клавиши[к[2]] == true);
  33. var скоростьГ = мир.игрок.задано["скорость.0"];
  34. var скоростьВ = мир.игрок.задано["скорость.1"];
  35. var скоростьY = (вверх && Math.abs(тело.velocity.y) <= 0.00001) ? -скоростьВ : тело.velocity.y;
  36. var скоростьX = 0;
  37. if (влево)
  38. {
  39. скоростьX = -скоростьГ;
  40. }
  41. else if (вправо)
  42. {
  43. скоростьX = скоростьГ;
  44. }
  45. Matter.Sleeping.set(тело, false);
  46. Matter.Body.setVelocity(тело, { x: скоростьX, y: скоростьY });
  47. }
  48. // // // //
  49. function задатьИгрокуМаскуСтолкновения()
  50. {
  51. var тело = мир.объекты.тела[мир.игрок.задано.объект];
  52. if (!тело)
  53. {
  54. return;
  55. }
  56. var прыжок = тело.velocity.y < -1;
  57. var маска = прыжок ? 1 : (1 | 2);
  58. тело.collisionFilter.mask = маска;
  59. }