Проверить 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.

800.пример.json.js 18KB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675
  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. ширина: 70,
  97. высота: 70,
  98. вид: {
  99. background: "url(р/отладка/основа.jpg)",
  100. },
  101. },
  102. изоПодошваИгрока: {
  103. ширина: 40,
  104. высота: 20,
  105. вид: {
  106. background: "url(р/отладка/основа.jpg)",
  107. },
  108. },
  109. },
  110. тела: {
  111. подошваИгрока: {
  112. x: 100,
  113. y: 450,
  114. ширина: 40,
  115. высота: 20,
  116. часть: true,
  117. физика: {
  118. isStatic: false,
  119. inertia: Infinity,
  120. },
  121. },
  122. сенсорИгрока: {
  123. x: 100,
  124. y: 400,
  125. ширина: 70,
  126. высота: 70,
  127. часть: true,
  128. физика: {
  129. isSensor: true,
  130. isStatic: false,
  131. },
  132. },
  133. игрок: {
  134. части: ["подошваИгрока", "сенсорИгрока"],
  135. физика: {
  136. isStatic: false,
  137. inertia: Infinity,
  138. },
  139. },
  140. },
  141. объекты: {
  142. /*
  143. кирпич: {
  144. x: 100,
  145. y: 350,
  146. высота: 20,
  147. ширина: 40,
  148. вид: {
  149. background: "url(р/отладка/основа.jpg)",
  150. //display: "none",
  151. },
  152. физика: {
  153. isStatic: false,
  154. inertia: Infinity,
  155. },
  156. },
  157. */
  158. },
  159. игрок: {
  160. //объект: "кирпич",
  161. тело: "игрок",
  162. скорость: [5, 12.5],
  163. клавиши: ["ArrowLeft", "ArrowRight", "ArrowUp"],
  164. },
  165. слежение: {
  166. колобок: {
  167. //объект: "кирпич",
  168. тело: "игрок",
  169. изображение: "колобок",
  170. смещение: [-35, -35],
  171. скорость: 1,
  172. },
  173. камера: {
  174. //объект: "кирпич",
  175. тело: "игрок",
  176. скорость: 0.1,
  177. },
  178. /*
  179. сенсорИгрока: {
  180. тело: "сенсорИгрока",
  181. изображение: "изоСенсорИгрока",
  182. смещение: [-35, -35],
  183. },
  184. */
  185. /*
  186. подошваИгрока: {
  187. тело: "подошваИгрока",
  188. изображение: "изоПодошваИгрока",
  189. смещение: [-20, -10],
  190. },
  191. */
  192. },
  193. маскиПрыжков: {
  194. игрок: {
  195. //объект: "кирпич",
  196. тело: "игрок",
  197. скорость: -1,
  198. маски: [1, 1|2],
  199. },
  200. },
  201. звуки: {
  202. прыжокИгрока: {
  203. события: ["игрок начал прыжок"],
  204. файл: "р/звуки/331381__qubodup__public-domain-jump-sound.wav",
  205. },
  206. },
  207. });
  208. // // // //
  209. // Платформы и объекты печи
  210. // // // //
  211. мир.разобрать({
  212. объекты: {
  213. фундаментПечи: {
  214. x: 570,
  215. y: 470,
  216. ширина: 550,
  217. вид: {
  218. background: "url(р/отладка/основа.jpg)",
  219. display: "none",
  220. },
  221. физика: {
  222. collisionFilter: {
  223. category: 2,
  224. },
  225. },
  226. },
  227. полка1: {
  228. x: 660,
  229. y: 335,
  230. ширина: 40,
  231. высота: 10,
  232. вид: {
  233. background: "url(р/отладка/основа.jpg)",
  234. display: "none",
  235. },
  236. физика: {
  237. collisionFilter: {
  238. category: 2,
  239. },
  240. },
  241. },
  242. полка2: {
  243. x: 767,
  244. y: 335,
  245. ширина: 40,
  246. высота: 10,
  247. вид: {
  248. background: "url(р/отладка/основа.jpg)",
  249. display: "none",
  250. },
  251. физика: {
  252. collisionFilter: {
  253. category: 2,
  254. },
  255. },
  256. },
  257. полка3: {
  258. x: 855,
  259. y: 335,
  260. ширина: 40,
  261. высота: 10,
  262. вид: {
  263. background: "url(р/отладка/основа.jpg)",
  264. display: "none",
  265. },
  266. физика: {
  267. collisionFilter: {
  268. category: 2,
  269. },
  270. },
  271. },
  272. полкаСамовара: {
  273. x: 975,
  274. y: 355,
  275. ширина: 70,
  276. высота: 10,
  277. вид: {
  278. background: "url(р/отладка/основа.jpg)",
  279. display: "none",
  280. },
  281. физика: {
  282. collisionFilter: {
  283. category: 2,
  284. },
  285. },
  286. },
  287. лежанкаПечки: {
  288. x: 600,
  289. y: 242,
  290. ширина: 330,
  291. высота: 10,
  292. вид: {
  293. background: "url(р/отладка/основа.jpg)",
  294. display: "none",
  295. },
  296. физика: {
  297. collisionFilter: {
  298. category: 2,
  299. },
  300. },
  301. },
  302. основаниеТрубыПечки: {
  303. x: 937,
  304. y: 175,
  305. ширина: 130,
  306. высота: 10,
  307. вид: {
  308. background: "url(р/отладка/основа.jpg)",
  309. display: "none",
  310. },
  311. физика: {
  312. collisionFilter: {
  313. category: 2,
  314. },
  315. },
  316. },
  317. самовар: {
  318. x: 650,
  319. y: 300,
  320. ширина: 70,
  321. высота: 120,
  322. вид: {
  323. background: "url(р/вещи/самовар.png) no-repeat scroll 0% 0% / contain",
  324. },
  325. физика: {
  326. isStatic: false,
  327. //inertia: Infinity,
  328. },
  329. },
  330. },
  331. });
  332. // // // //
  333. // Подкидывание стрелы
  334. // // // //
  335. мир.разобрать({
  336. объекты: {
  337. сенсор: {
  338. x: 1280,
  339. y: 400,
  340. ширина: 120,
  341. вид: {
  342. background: "url(р/отладка/основа.jpg)",
  343. display: "none",
  344. },
  345. физика: {
  346. isStatic: true,
  347. isSensor: true,
  348. },
  349. },
  350. стрела: {
  351. x: 1230,
  352. y: 350,
  353. высота: 30,
  354. ширина: 200,
  355. вид: {
  356. display: "inline-block",
  357. background: "url(р/вещи/стрела.png) no-repeat scroll 0% 0% / contain",
  358. transform: "scaleX(-1)",
  359. },
  360. физика: {
  361. isStatic: false,
  362. inertia: Infinity,
  363. collisionFilter: {
  364. category: 4,
  365. },
  366. },
  367. },
  368. лук: {
  369. x: 1250,
  370. y: 200,
  371. ширина: 100,
  372. вид: {
  373. background: "url(р/отладка/основа.jpg)",
  374. display: "none",
  375. },
  376. физика: {
  377. isStatic: true,
  378. collisionFilter: {
  379. category: 4,
  380. },
  381. },
  382. },
  383. },
  384. столкновения: {
  385. стрелаНачало: {
  386. объекты: ["сенсор"],
  387. тела: ["игрок"],
  388. событие: "сенсор стрелы",
  389. },
  390. стрелаКонец: {
  391. объекты: ["стрела", "лук"],
  392. событие: "стрела и лук",
  393. },
  394. },
  395. маскиПрыжков: {
  396. стрела: {
  397. объект: "стрела",
  398. скорость: -1,
  399. маски: [0, 2|4]
  400. },
  401. },
  402. звуки: {
  403. зарядкаЛука: {
  404. события: ["закинули стрелу"],
  405. файл: "р/звуки/543927__eminyildirim__pistol-gun-cocking.wav",
  406. },
  407. },
  408. });
  409. function ПодкидываниеСтрелы() {
  410. this.создать = function() {
  411. this.времяСтрелы = null;
  412. this.времяПриземления = null;
  413. this.подкинули = false;
  414. this.закинули = false;
  415. this.завершить = null;
  416. мир.события.подписать(this);
  417. };
  418. this.обработатьСобытие = function(событие) {
  419. if (событие == "сенсор стрелы")
  420. {
  421. this.времяСтрелы = мир.физика.движок.timing.timestamp;
  422. this.подкинуть();
  423. }
  424. else if (событие == "игрок приземлился")
  425. {
  426. this.времяПриземления = мир.физика.движок.timing.timestamp;
  427. this.подкинуть();
  428. }
  429. else if (событие == "игрок начал прыжок")
  430. {
  431. this.времяСтрелы = null;
  432. this.времяПриземления = null;
  433. this.подкинули = false;
  434. }
  435. else if (
  436. (событие == "стрела и лук") &&
  437. this.закинули &&
  438. this.завершить
  439. ) {
  440. мир.события.уведомить("закинули стрелу");
  441. мир.события.отписать(this);
  442. this.завершить();
  443. }
  444. };
  445. this.подкинуть = function() {
  446. if (
  447. this.подкинули ||
  448. !this.времяСтрелы ||
  449. !this.времяПриземления ||
  450. Math.abs(this.времяСтрелы - this.времяПриземления) > 0.00001 ||
  451. Math.abs(мир.объекты.тела.стрела.velocity.y) > 0.00001
  452. ) {
  453. return;
  454. }
  455. this.подкинули = true;
  456. Matter.Body.setVelocity(
  457. мир.объекты.тела.стрела,
  458. { x: 0, y: -мир.игрок.приземление.скорость * 1.2 }
  459. );
  460. if (мир.игрок.приземление.скорость > 16)
  461. {
  462. this.закинули = true;
  463. }
  464. };
  465. // Конструктор.
  466. this.создать();
  467. }
  468. мир.подкидываниеСтрелы = new ПодкидываниеСтрелы();
  469. мир.подкидываниеСтрелы.завершить = function() {
  470. мир.подкидываниеСтрелы = null;
  471. };
  472. // Запустить звук избы
  473. мир.события.уведомить("вошли в избу");
  474. // // // //
  475. // Отладка событий
  476. // // // //
  477. function ОтладкаСобытий() {
  478. this.обработатьСобытие = function(событие) {
  479. if (событие.startsWith("игрокПаук"))
  480. {
  481. //console.debug("событие", событие);
  482. }
  483. };
  484. // Конструктор.
  485. мир.события.подписать(this);
  486. }
  487. мир.отладкаСобытий = new ОтладкаСобытий();
  488. // // // //
  489. // Пауки
  490. // // // //
  491. мир.разобрать({
  492. объекты: {
  493. паук1: {
  494. x: 680,
  495. y: 300,
  496. ширина: 30,
  497. вид: {
  498. background: "url(р/животные/паук.png) no-repeat scroll 0% 0% / contain",
  499. },
  500. физика: {
  501. isStatic: false,
  502. isSensor: true,
  503. },
  504. },
  505. },
  506. столкновения: {
  507. игрокПаук1: {
  508. объекты: ["паук1"],
  509. тела: ["игрок"],
  510. событие: "игрокПаук1",
  511. },
  512. },
  513. движение: {
  514. паук1: {
  515. объекты: ["паук1"],
  516. скорость: [0.7, 1],
  517. x: [610, 1080],
  518. y: [350, 450],
  519. },
  520. },
  521. });
  522. // // // //
  523. // Повреждение игрока
  524. // // // //
  525. function ПовреждениеИгрока(события, колобок, имяТела)
  526. {
  527. this.создать = function()
  528. {
  529. события.подписать(this);
  530. this.создатьМигание();
  531. this.запомнитьМаску();
  532. this.повреждение = null;
  533. };
  534. this.создатьМигание = function()
  535. {
  536. var вид = document.createElement('style')
  537. вид.innerText = `
  538. .мигание
  539. {
  540. animation: мигатель 0.5s linear infinite;
  541. }
  542. @keyframes мигатель
  543. {
  544. 50%
  545. {
  546. opacity: 0;
  547. }
  548. }
  549. `;
  550. document.head.appendChild(вид)
  551. };
  552. this.обработатьСобытие = function(событие)
  553. {
  554. if (событие.startsWith("игрокПаук"))
  555. {
  556. this.повредить();
  557. }
  558. };
  559. this.запомнитьМаску = function()
  560. {
  561. var за = мир.маскиПрыжков.задано;
  562. for (var имя in за)
  563. {
  564. var з = за[имя];
  565. if (з.тело == имяТела)
  566. {
  567. this.имя = имя;
  568. this.маски = [з["маски.0"], з["маски.1"]];
  569. return;
  570. }
  571. }
  572. };
  573. this.выставитьМаскиПовреждения = function()
  574. {
  575. var з = мир.маскиПрыжков.задано[this.имя];
  576. з["маски.0"] = 1;
  577. з["маски.1"] = 1;
  578. };
  579. this.вернутьПервоначальныеМаски = function()
  580. {
  581. var з = мир.маскиПрыжков.задано[this.имя];
  582. з["маски.0"] = this.маски[0];
  583. з["маски.1"] = this.маски[1];
  584. };
  585. this.повредить = function()
  586. {
  587. if (!this.повреждение)
  588. {
  589. колобок.classList.add("мигание");
  590. this.выставитьМаскиПовреждения();
  591. }
  592. this.повреждение = new Date();
  593. var тут = this;
  594. setTimeout(
  595. function() { тут.возможноПрекратить() },
  596. 5000
  597. );
  598. };
  599. this.возможноПрекратить = function()
  600. {
  601. if (!this.повреждение)
  602. {
  603. return;
  604. }
  605. var сейчас = new Date();
  606. var прошло = сейчас - this.повреждение;
  607. if (прошло > 4990)
  608. {
  609. колобок.classList.remove("мигание")
  610. this.вернутьПервоначальныеМаски();
  611. this.повреждение = null;
  612. }
  613. };
  614. // Конструктор.
  615. this.создать();
  616. }
  617. мир.повреждениеИгрока = new ПовреждениеИгрока(
  618. мир.события,
  619. мир.изображения.элементы.колобок,
  620. "игрок"
  621. );