Проверить Matter.js
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

563 líneas
15KB

  1. // // // //
  2. // Основа избы
  3. // // // //
  4. мир.разобрать({
  5. заголовок: "Колобку здесь быть",
  6. изображения: {
  7. дом: {
  8. ширина: 2000,
  9. высота: 600,
  10. вид: {
  11. background: "url(р/сцены/изба.jpg)",
  12. },
  13. },
  14. },
  15. объекты: {
  16. полСлева: {
  17. x: 0,
  18. y: 580,
  19. ширина: 355,
  20. вид: {
  21. background: "url(р/отладка/основа.jpg)",
  22. display: "none",
  23. },
  24. },
  25. полКрышки: {
  26. x: 357,
  27. y: 580,
  28. ширина: 135,
  29. вид: {
  30. background: "url(р/отладка/основа.jpg)",
  31. display: "none",
  32. },
  33. },
  34. полСправа: {
  35. x: 495,
  36. y: 580,
  37. ширина: 1505,
  38. вид: {
  39. background: "url(р/отладка/основа.jpg)",
  40. display: "none",
  41. },
  42. },
  43. стол: {
  44. x: 1253,
  45. y: 420,
  46. ширина: 610,
  47. вид: {
  48. background: "url(р/отладка/основа.jpg)",
  49. display: "none",
  50. },
  51. физика: {
  52. collisionFilter: {
  53. category: 2,
  54. },
  55. },
  56. },
  57. подоконник: {
  58. x: 1673,
  59. y: 375,
  60. ширина: 200,
  61. вид: {
  62. background: "url(р/отладка/основа.jpg)",
  63. display: "none",
  64. },
  65. физика: {
  66. angle: -0.0698,
  67. collisionFilter: {
  68. category: 2,
  69. },
  70. },
  71. },
  72. },
  73. звуки: {
  74. изба: {
  75. события: ["вошли в избу"],
  76. файл: "р/звуки/387922__setuniman__scheming-1o95.mp3",
  77. повторять: true,
  78. останов: ["покинули избу"],
  79. },
  80. },
  81. });
  82. // // // //
  83. // Игрок
  84. // // // //
  85. мир.разобрать({
  86. изображения: {
  87. колобок: {
  88. ширина: 70,
  89. высота: 70,
  90. вид: {
  91. background: "url(р/колобок/колобок_неподвижен.png)",
  92. //"z-index": 10,
  93. },
  94. },
  95. },
  96. тела: {
  97. подошваИгрока: {
  98. x: 100,
  99. y: 450,
  100. высота: 20,
  101. ширина: 40,
  102. часть: true,
  103. физика: {
  104. isStatic: false,
  105. inertia: Infinity,
  106. },
  107. },
  108. сенсорИгрока: {
  109. x: 100,
  110. y: 450,
  111. высота: 70,
  112. ширина: 70,
  113. часть: true,
  114. физика: {
  115. isSensor: true,
  116. isStatic: false,
  117. },
  118. },
  119. игрок: {
  120. x: 100,
  121. y: 450,
  122. части: ["подошваИгрока", "сенсорИгрока"],
  123. физика: {
  124. isStatic: false,
  125. inertia: Infinity,
  126. },
  127. },
  128. },
  129. объекты: {
  130. кирпич: {
  131. x: 100,
  132. y: 350,
  133. высота: 20,
  134. ширина: 40,
  135. вид: {
  136. background: "url(р/отладка/основа.jpg)",
  137. //display: "none",
  138. },
  139. физика: {
  140. isStatic: false,
  141. inertia: Infinity,
  142. },
  143. },
  144. /*
  145. сенсорИгрока: {
  146. x: 170,
  147. y: 350,
  148. высота: 70,
  149. ширина: 70,
  150. вид: {
  151. background: "url(р/отладка/основа.jpg)",
  152. },
  153. физика: {
  154. isSensor: true,
  155. },
  156. },
  157. игрок: {
  158. x: 100,
  159. y: 350,
  160. части: ["кирпич", "сенсорИгрока"],
  161. физика: {
  162. isStatic: false,
  163. inertia: Infinity,
  164. },
  165. },
  166. */
  167. },
  168. игрок: {
  169. объект: "кирпич",
  170. скорость: [5, 12.5],
  171. клавиши: ["ArrowLeft", "ArrowRight", "ArrowUp"],
  172. },
  173. слежение: {
  174. колобок: {
  175. объект: "кирпич",
  176. изображение: "колобок",
  177. смещение: [-35, -60],
  178. скорость: 1,
  179. },
  180. камера: {
  181. объект: "кирпич",
  182. скорость: 0.1,
  183. },
  184. },
  185. маскиПрыжков: {
  186. игрок: {
  187. объект: "кирпич",
  188. скорость: -1,
  189. маски: [1, 1|2],
  190. },
  191. },
  192. звуки: {
  193. прыжокИгрока: {
  194. события: ["игрок начал прыжок"],
  195. файл: "р/звуки/331381__qubodup__public-domain-jump-sound.wav",
  196. },
  197. },
  198. });
  199. // // // //
  200. // Платформы и объекты печи
  201. // // // //
  202. мир.разобрать({
  203. объекты: {
  204. фундаментПечи: {
  205. x: 570,
  206. y: 470,
  207. ширина: 550,
  208. вид: {
  209. background: "url(р/отладка/основа.jpg)",
  210. display: "none",
  211. },
  212. физика: {
  213. collisionFilter: {
  214. category: 2,
  215. },
  216. },
  217. },
  218. полка1: {
  219. x: 660,
  220. y: 335,
  221. ширина: 40,
  222. высота: 10,
  223. вид: {
  224. background: "url(р/отладка/основа.jpg)",
  225. display: "none",
  226. },
  227. физика: {
  228. collisionFilter: {
  229. category: 2,
  230. },
  231. },
  232. },
  233. полка2: {
  234. x: 767,
  235. y: 335,
  236. ширина: 40,
  237. высота: 10,
  238. вид: {
  239. background: "url(р/отладка/основа.jpg)",
  240. display: "none",
  241. },
  242. физика: {
  243. collisionFilter: {
  244. category: 2,
  245. },
  246. },
  247. },
  248. полка3: {
  249. x: 855,
  250. y: 335,
  251. ширина: 40,
  252. высота: 10,
  253. вид: {
  254. background: "url(р/отладка/основа.jpg)",
  255. display: "none",
  256. },
  257. физика: {
  258. collisionFilter: {
  259. category: 2,
  260. },
  261. },
  262. },
  263. полкаСамовара: {
  264. x: 975,
  265. y: 355,
  266. ширина: 70,
  267. высота: 10,
  268. вид: {
  269. background: "url(р/отладка/основа.jpg)",
  270. display: "none",
  271. },
  272. физика: {
  273. collisionFilter: {
  274. category: 2,
  275. },
  276. },
  277. },
  278. лежанкаПечки: {
  279. x: 600,
  280. y: 242,
  281. ширина: 330,
  282. высота: 10,
  283. вид: {
  284. background: "url(р/отладка/основа.jpg)",
  285. display: "none",
  286. },
  287. физика: {
  288. collisionFilter: {
  289. category: 2,
  290. },
  291. },
  292. },
  293. основаниеТрубыПечки: {
  294. x: 937,
  295. y: 175,
  296. ширина: 130,
  297. высота: 10,
  298. вид: {
  299. background: "url(р/отладка/основа.jpg)",
  300. display: "none",
  301. },
  302. физика: {
  303. collisionFilter: {
  304. category: 2,
  305. },
  306. },
  307. },
  308. самовар: {
  309. x: 650,
  310. y: 300,
  311. ширина: 70,
  312. высота: 120,
  313. вид: {
  314. background: "url(р/вещи/самовар.png) no-repeat scroll 0% 0% / contain",
  315. },
  316. физика: {
  317. isStatic: false,
  318. //inertia: Infinity,
  319. },
  320. },
  321. },
  322. });
  323. // // // //
  324. // Подкидывание стрелы
  325. // // // //
  326. мир.разобрать({
  327. объекты: {
  328. сенсор: {
  329. x: 1280,
  330. y: 400,
  331. ширина: 120,
  332. вид: {
  333. background: "url(р/отладка/основа.jpg)",
  334. display: "none",
  335. },
  336. физика: {
  337. isStatic: true,
  338. isSensor: true,
  339. },
  340. },
  341. стрела: {
  342. x: 1230,
  343. y: 350,
  344. высота: 30,
  345. ширина: 200,
  346. вид: {
  347. display: "inline-block",
  348. background: "url(р/вещи/стрела.png) no-repeat scroll 0% 0% / contain",
  349. transform: "scaleX(-1)",
  350. },
  351. физика: {
  352. isStatic: false,
  353. inertia: Infinity,
  354. collisionFilter: {
  355. category: 4,
  356. },
  357. },
  358. },
  359. лук: {
  360. x: 1250,
  361. y: 200,
  362. ширина: 100,
  363. вид: {
  364. background: "url(р/отладка/основа.jpg)",
  365. display: "none",
  366. },
  367. физика: {
  368. isStatic: true,
  369. collisionFilter: {
  370. category: 4,
  371. },
  372. },
  373. },
  374. },
  375. столкновения: {
  376. стрелаНачало: {
  377. объекты: ["кирпич", "сенсор"],
  378. событие: "сенсор стрелы",
  379. },
  380. стрелаКонец: {
  381. объекты: ["стрела", "лук"],
  382. событие: "стрела и лук",
  383. },
  384. },
  385. маскиПрыжков: {
  386. стрела: {
  387. объект: "стрела",
  388. скорость: -1,
  389. маски: [0, 2|4]
  390. },
  391. },
  392. звуки: {
  393. зарядкаЛука: {
  394. события: ["закинули стрелу"],
  395. файл: "р/звуки/543927__eminyildirim__pistol-gun-cocking.wav",
  396. },
  397. },
  398. });
  399. function ПодкидываниеСтрелы() {
  400. this.создать = function() {
  401. this.времяСтрелы = null;
  402. this.времяПриземления = null;
  403. this.подкинули = false;
  404. this.закинули = false;
  405. this.завершить = null;
  406. мир.события.подписать(this);
  407. };
  408. this.обработатьСобытие = function(событие) {
  409. if (событие == "сенсор стрелы")
  410. {
  411. this.времяСтрелы = мир.физика.движок.timing.timestamp;
  412. this.подкинуть();
  413. }
  414. else if (событие == "игрок приземлился")
  415. {
  416. this.времяПриземления = мир.физика.движок.timing.timestamp;
  417. this.подкинуть();
  418. }
  419. else if (событие == "игрок начал прыжок")
  420. {
  421. this.времяСтрелы = null;
  422. this.времяПриземления = null;
  423. this.подкинули = false;
  424. }
  425. else if (
  426. (событие == "стрела и лук") &&
  427. this.закинули &&
  428. this.завершить
  429. ) {
  430. мир.события.уведомить("закинули стрелу");
  431. мир.события.отписать(this);
  432. this.завершить();
  433. }
  434. };
  435. this.подкинуть = function() {
  436. if (
  437. this.подкинули ||
  438. !this.времяСтрелы ||
  439. !this.времяПриземления ||
  440. Math.abs(this.времяСтрелы - this.времяПриземления) > 0.00001 ||
  441. Math.abs(мир.объекты.тела.стрела.velocity.y) > 0.00001
  442. ) {
  443. return;
  444. }
  445. this.подкинули = true;
  446. Matter.Body.setVelocity(
  447. мир.объекты.тела.стрела,
  448. { x: 0, y: -мир.игрок.приземление.скорость * 1.2 }
  449. );
  450. if (мир.игрок.приземление.скорость > 16)
  451. {
  452. this.закинули = true;
  453. }
  454. };
  455. // Конструктор.
  456. this.создать();
  457. }
  458. мир.подкидываниеСтрелы = new ПодкидываниеСтрелы();
  459. мир.подкидываниеСтрелы.завершить = function() {
  460. мир.подкидываниеСтрелы = null;
  461. };
  462. // Запустить звук избы
  463. мир.события.уведомить("вошли в избу");
  464. // // // //
  465. // Отладка событий
  466. // // // //
  467. function ОтладкаСобытий() {
  468. this.обработатьСобытие = function(событие) {
  469. if (событие.startsWith("игрокПаук"))
  470. {
  471. console.debug("событие", событие);
  472. }
  473. };
  474. // Конструктор.
  475. мир.события.подписать(this);
  476. }
  477. мир.отладкаСобытий = new ОтладкаСобытий();
  478. // // // //
  479. // Пауки
  480. // // // //
  481. мир.разобрать({
  482. объекты: {
  483. паук1: {
  484. x: 680,
  485. y: 300,
  486. ширина: 30,
  487. вид: {
  488. background: "url(р/животные/паук.png) no-repeat scroll 0% 0% / contain",
  489. },
  490. физика: {
  491. isStatic: false,
  492. isSensor: true,
  493. },
  494. },
  495. },
  496. столкновения: {
  497. игрокПаук1: {
  498. объекты: ["кирпич", "паук1"],
  499. событие: "игрокПаук1",
  500. },
  501. /*
  502. проверкаСенсораИгрокаРТ: {
  503. объекты: ["рт", "паук1"],
  504. событие: "игрокПаукРТ",
  505. },
  506. проверкаСенсораИгрокаРТ1: {
  507. объекты: ["рт1", "паук1"],
  508. событие: "игрокПаукРТ1",
  509. },
  510. проверкаСенсораИгрокаРТ2: {
  511. объекты: ["рт2", "паук1"],
  512. событие: "игрокПаукРТ2",
  513. },
  514. */
  515. },
  516. движение: {
  517. паук1: {
  518. объекты: ["паук1"],
  519. скорость: [0.7, 1],
  520. x: [610, 1080],
  521. y: [350, 450],
  522. },
  523. },
  524. });