Проверить Matter.js
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

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

2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783
  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. полКрышки: {
  27. x: 357,
  28. y: 580,
  29. ширина: 135,
  30. вид: {
  31. background: "url(р/отладка/основа.jpg)",
  32. display: "none",
  33. },
  34. },
  35. */
  36. полСправа: {
  37. x: 495,
  38. y: 580,
  39. ширина: 1505,
  40. вид: {
  41. background: "url(р/отладка/основа.jpg)",
  42. display: "none",
  43. },
  44. },
  45. стол: {
  46. x: 1253,
  47. y: 420,
  48. ширина: 610,
  49. вид: {
  50. background: "url(р/отладка/основа.jpg)",
  51. display: "none",
  52. },
  53. физика: {
  54. collisionFilter: {
  55. category: 2,
  56. },
  57. },
  58. },
  59. подоконник: {
  60. x: 1673,
  61. y: 375,
  62. ширина: 200,
  63. вид: {
  64. background: "url(р/отладка/основа.jpg)",
  65. display: "none",
  66. },
  67. физика: {
  68. angle: -0.0698,
  69. collisionFilter: {
  70. category: 2,
  71. },
  72. },
  73. },
  74. },
  75. звуки: {
  76. изба: {
  77. события: ["вошли в избу"],
  78. файл: "р/звуки/387922__setuniman__scheming-1o95.mp3",
  79. повторять: true,
  80. останов: ["покинули избу"],
  81. },
  82. },
  83. });
  84. // // // //
  85. // Игрок
  86. // // // //
  87. мир.разобрать({
  88. изображения: {
  89. колобок: {
  90. ширина: 70,
  91. высота: 70,
  92. вид: {
  93. background: "url(р/колобок/колобок_неподвижен.png)",
  94. //"z-index": 10,
  95. },
  96. },
  97. изоСенсорИгрока: {
  98. ширина: 70,
  99. высота: 70,
  100. вид: {
  101. background: "url(р/отладка/основа.jpg)",
  102. },
  103. },
  104. изоПодошваИгрока: {
  105. ширина: 40,
  106. высота: 20,
  107. вид: {
  108. background: "url(р/отладка/основа.jpg)",
  109. },
  110. },
  111. },
  112. тела: {
  113. подошваИгрока: {
  114. x: 100,
  115. y: 450,
  116. ширина: 40,
  117. высота: 20,
  118. часть: true,
  119. физика: {
  120. isStatic: false,
  121. inertia: Infinity,
  122. },
  123. },
  124. сенсорИгрока: {
  125. x: 100,
  126. y: 400,
  127. ширина: 70,
  128. высота: 70,
  129. часть: true,
  130. физика: {
  131. isSensor: true,
  132. isStatic: false,
  133. },
  134. },
  135. игрок: {
  136. части: ["подошваИгрока", "сенсорИгрока"],
  137. физика: {
  138. isStatic: false,
  139. inertia: Infinity,
  140. },
  141. },
  142. },
  143. объекты: {
  144. /*
  145. кирпич: {
  146. x: 100,
  147. y: 350,
  148. высота: 20,
  149. ширина: 40,
  150. вид: {
  151. background: "url(р/отладка/основа.jpg)",
  152. //display: "none",
  153. },
  154. физика: {
  155. isStatic: false,
  156. inertia: Infinity,
  157. },
  158. },
  159. */
  160. },
  161. игрок: {
  162. //объект: "кирпич",
  163. тело: "игрок",
  164. скорость: [5, 12.5],
  165. клавиши: ["ArrowLeft", "ArrowRight", "ArrowUp"],
  166. },
  167. слежение: {
  168. колобок: {
  169. //объект: "кирпич",
  170. тело: "игрок",
  171. изображение: "колобок",
  172. смещение: [-35, -35],
  173. скорость: 1,
  174. },
  175. камера: {
  176. //объект: "кирпич",
  177. тело: "игрок",
  178. скорость: 0.1,
  179. },
  180. /*
  181. сенсорИгрока: {
  182. тело: "сенсорИгрока",
  183. изображение: "изоСенсорИгрока",
  184. смещение: [-35, -35],
  185. },
  186. */
  187. /*
  188. подошваИгрока: {
  189. тело: "подошваИгрока",
  190. изображение: "изоПодошваИгрока",
  191. смещение: [-20, -10],
  192. },
  193. */
  194. },
  195. маскиПрыжков: {
  196. игрок: {
  197. //объект: "кирпич",
  198. тело: "игрок",
  199. скорость: -1,
  200. маски: [1, 1|2],
  201. },
  202. },
  203. звуки: {
  204. прыжокИгрока: {
  205. события: ["игрок начал прыжок"],
  206. файл: "р/звуки/331381__qubodup__public-domain-jump-sound.wav",
  207. },
  208. },
  209. });
  210. // // // //
  211. // Платформы и объекты печи
  212. // // // //
  213. мир.разобрать({
  214. объекты: {
  215. фундаментПечи: {
  216. x: 570,
  217. y: 470,
  218. ширина: 550,
  219. вид: {
  220. background: "url(р/отладка/основа.jpg)",
  221. display: "none",
  222. },
  223. физика: {
  224. collisionFilter: {
  225. category: 2,
  226. },
  227. },
  228. },
  229. полка1: {
  230. x: 660,
  231. y: 335,
  232. ширина: 40,
  233. высота: 10,
  234. вид: {
  235. background: "url(р/отладка/основа.jpg)",
  236. display: "none",
  237. },
  238. физика: {
  239. collisionFilter: {
  240. category: 2,
  241. },
  242. },
  243. },
  244. полка2: {
  245. x: 767,
  246. y: 335,
  247. ширина: 40,
  248. высота: 10,
  249. вид: {
  250. background: "url(р/отладка/основа.jpg)",
  251. display: "none",
  252. },
  253. физика: {
  254. collisionFilter: {
  255. category: 2,
  256. },
  257. },
  258. },
  259. полка3: {
  260. x: 855,
  261. y: 335,
  262. ширина: 40,
  263. высота: 10,
  264. вид: {
  265. background: "url(р/отладка/основа.jpg)",
  266. display: "none",
  267. },
  268. физика: {
  269. collisionFilter: {
  270. category: 2,
  271. },
  272. },
  273. },
  274. полкаСамовара: {
  275. x: 975,
  276. y: 355,
  277. ширина: 70,
  278. высота: 10,
  279. вид: {
  280. background: "url(р/отладка/основа.jpg)",
  281. display: "none",
  282. },
  283. физика: {
  284. collisionFilter: {
  285. category: 2,
  286. },
  287. },
  288. },
  289. лежанкаПечки: {
  290. x: 600,
  291. y: 242,
  292. ширина: 330,
  293. высота: 10,
  294. вид: {
  295. background: "url(р/отладка/основа.jpg)",
  296. display: "none",
  297. },
  298. физика: {
  299. collisionFilter: {
  300. category: 2,
  301. },
  302. },
  303. },
  304. основаниеТрубыПечки: {
  305. x: 937,
  306. y: 175,
  307. ширина: 130,
  308. высота: 10,
  309. вид: {
  310. background: "url(р/отладка/основа.jpg)",
  311. display: "none",
  312. },
  313. физика: {
  314. collisionFilter: {
  315. category: 2,
  316. },
  317. },
  318. },
  319. самовар: {
  320. x: 650,
  321. y: 300,
  322. ширина: 70,
  323. высота: 120,
  324. вид: {
  325. background: "url(р/вещи/самовар.png) no-repeat scroll 0% 0% / contain",
  326. },
  327. физика: {
  328. isStatic: false,
  329. //inertia: Infinity,
  330. },
  331. },
  332. },
  333. });
  334. // // // //
  335. // Подкидывание стрелы
  336. // // // //
  337. мир.разобрать({
  338. объекты: {
  339. сенсор: {
  340. x: 1280,
  341. y: 400,
  342. ширина: 120,
  343. вид: {
  344. background: "url(р/отладка/основа.jpg)",
  345. display: "none",
  346. },
  347. физика: {
  348. isStatic: true,
  349. isSensor: true,
  350. },
  351. },
  352. стрела: {
  353. x: 1230,
  354. y: 350,
  355. высота: 30,
  356. ширина: 200,
  357. вид: {
  358. display: "inline-block",
  359. background: "url(р/вещи/стрела.png) no-repeat scroll 0% 0% / contain",
  360. transform: "scaleX(-1)",
  361. },
  362. физика: {
  363. isStatic: false,
  364. inertia: Infinity,
  365. collisionFilter: {
  366. category: 4,
  367. },
  368. },
  369. },
  370. лук: {
  371. x: 1250,
  372. y: 200,
  373. ширина: 100,
  374. вид: {
  375. background: "url(р/отладка/основа.jpg)",
  376. display: "none",
  377. },
  378. физика: {
  379. isStatic: true,
  380. collisionFilter: {
  381. category: 4,
  382. },
  383. },
  384. },
  385. },
  386. столкновения: {
  387. стрелаНачало: {
  388. объекты: ["сенсор"],
  389. тела: ["игрок"],
  390. событие: "сенсор стрелы",
  391. },
  392. стрелаКонец: {
  393. объекты: ["стрела", "лук"],
  394. событие: "стрела и лук",
  395. },
  396. },
  397. маскиПрыжков: {
  398. стрела: {
  399. объект: "стрела",
  400. скорость: -1,
  401. маски: [0, 2|4]
  402. },
  403. },
  404. звуки: {
  405. зарядкаЛука: {
  406. события: ["закинули стрелу"],
  407. файл: "р/звуки/543927__eminyildirim__pistol-gun-cocking.wav",
  408. },
  409. },
  410. });
  411. function ПодкидываниеСтрелы() {
  412. this.создать = function() {
  413. this.времяСтрелы = null;
  414. this.времяПриземления = null;
  415. this.подкинули = false;
  416. this.закинули = false;
  417. this.завершить = null;
  418. мир.события.подписать(this);
  419. };
  420. this.обработатьСобытие = function(событие) {
  421. if (событие == "сенсор стрелы")
  422. {
  423. this.времяСтрелы = мир.физика.движок.timing.timestamp;
  424. this.подкинуть();
  425. }
  426. else if (событие == "игрок приземлился")
  427. {
  428. this.времяПриземления = мир.физика.движок.timing.timestamp;
  429. this.подкинуть();
  430. }
  431. else if (событие == "игрок начал прыжок")
  432. {
  433. this.времяСтрелы = null;
  434. this.времяПриземления = null;
  435. this.подкинули = false;
  436. }
  437. else if (
  438. (событие == "стрела и лук") &&
  439. this.закинули &&
  440. this.завершить
  441. ) {
  442. мир.события.уведомить("закинули стрелу");
  443. мир.события.отписать(this);
  444. this.завершить();
  445. }
  446. };
  447. this.подкинуть = function() {
  448. if (
  449. this.подкинули ||
  450. !this.времяСтрелы ||
  451. !this.времяПриземления ||
  452. Math.abs(this.времяСтрелы - this.времяПриземления) > 0.00001 ||
  453. Math.abs(мир.объекты.тела.стрела.velocity.y) > 0.00001
  454. ) {
  455. return;
  456. }
  457. this.подкинули = true;
  458. Matter.Body.setVelocity(
  459. мир.объекты.тела.стрела,
  460. { x: 0, y: -мир.игрок.приземление.скорость * 1.2 }
  461. );
  462. if (мир.игрок.приземление.скорость > 16)
  463. {
  464. this.закинули = true;
  465. }
  466. };
  467. // Конструктор.
  468. this.создать();
  469. }
  470. мир.подкидываниеСтрелы = new ПодкидываниеСтрелы();
  471. мир.подкидываниеСтрелы.завершить = function() {
  472. мир.подкидываниеСтрелы = null;
  473. };
  474. // Запустить звук избы
  475. мир.события.уведомить("вошли в избу");
  476. // // // //
  477. // Пауки и мыши
  478. // // // //
  479. мир.разобрать({
  480. объекты: {
  481. паук1: {
  482. x: 680,
  483. y: 300,
  484. ширина: 30,
  485. вид: {
  486. background: "url(р/животные/паук.png) no-repeat scroll 0% 0% / contain",
  487. },
  488. физика: {
  489. isStatic: false,
  490. isSensor: true,
  491. },
  492. },
  493. мышь1: {
  494. x: 500,
  495. y: 555,
  496. высота: 70,
  497. ширина: 90,
  498. вид: {
  499. background: "url(р/животные/мышь.png) no-repeat scroll 0% 0% / contain",
  500. },
  501. физика: {
  502. isStatic: false,
  503. isSensor: true,
  504. },
  505. },
  506. },
  507. столкновения: {
  508. игрокПаук1: {
  509. объекты: ["паук1"],
  510. тела: ["игрок"],
  511. событие: "игрокПаук1",
  512. },
  513. игрокМышь1: {
  514. объекты: ["мышь1"],
  515. тела: ["игрок"],
  516. событие: "игрокМышь1",
  517. },
  518. леваяСтенаМышь1: {
  519. объекты: ["мышь1", "стенаЛевая"],
  520. событие: "леваяСтенаМышь1",
  521. },
  522. праваяСтенаМышь1: {
  523. объекты: ["мышь1", "стенаПравая"],
  524. событие: "праваяСтенаМышь1",
  525. },
  526. },
  527. движение: {
  528. паук1: {
  529. объекты: ["паук1"],
  530. скорость: [0.7, 1],
  531. x: [610, 1080],
  532. y: [350, 450],
  533. },
  534. мышь1: {
  535. объекты: ["мышь1"],
  536. скорость: [8, 1.0],
  537. x: [0, 2000],
  538. y: [590, 590],
  539. },
  540. },
  541. });
  542. // // // //
  543. // Повреждение игрока
  544. // // // //
  545. function ПовреждениеИгрока(события, колобок, имяТела)
  546. {
  547. this.создать = function()
  548. {
  549. события.подписать(this);
  550. this.создатьМигание();
  551. this.запомнитьМаску();
  552. this.повреждение = null;
  553. };
  554. this.создатьМигание = function()
  555. {
  556. var вид = document.createElement('style')
  557. вид.innerText = `
  558. .мигание
  559. {
  560. animation: мигатель 0.5s linear infinite;
  561. }
  562. @keyframes мигатель
  563. {
  564. 50%
  565. {
  566. opacity: 0;
  567. }
  568. }
  569. `;
  570. document.head.appendChild(вид)
  571. };
  572. this.обработатьСобытие = function(событие)
  573. {
  574. if (событие == "игрокПаук1")
  575. {
  576. this.повредить(1);
  577. }
  578. else if (событие == "игрокМышь1")
  579. {
  580. this.повредить(10);
  581. }
  582. };
  583. this.запомнитьМаску = function()
  584. {
  585. var за = мир.маскиПрыжков.задано;
  586. for (var имя in за)
  587. {
  588. var з = за[имя];
  589. if (з.тело == имяТела)
  590. {
  591. this.имя = имя;
  592. this.маски = [з["маски.0"], з["маски.1"]];
  593. return;
  594. }
  595. }
  596. };
  597. this.выставитьМаскиПовреждения = function(значение)
  598. {
  599. var з = мир.маскиПрыжков.задано[this.имя];
  600. з["маски.0"] = значение;
  601. з["маски.1"] = значение;
  602. };
  603. this.вернутьПервоначальныеМаски = function()
  604. {
  605. var з = мир.маскиПрыжков.задано[this.имя];
  606. з["маски.0"] = this.маски[0];
  607. з["маски.1"] = this.маски[1];
  608. };
  609. this.повредить = function(значение)
  610. {
  611. if (!this.повреждение)
  612. {
  613. колобок.classList.add("мигание");
  614. }
  615. this.выставитьМаскиПовреждения(значение);
  616. this.повреждение = new Date();
  617. var тут = this;
  618. setTimeout(
  619. function() { тут.возможноПрекратить() },
  620. 5000
  621. );
  622. };
  623. this.возможноПрекратить = function()
  624. {
  625. if (!this.повреждение)
  626. {
  627. return;
  628. }
  629. var сейчас = new Date();
  630. var прошло = сейчас - this.повреждение;
  631. if (прошло > 4990)
  632. {
  633. колобок.classList.remove("мигание")
  634. this.вернутьПервоначальныеМаски();
  635. this.повреждение = null;
  636. }
  637. };
  638. // Конструктор.
  639. this.создать();
  640. }
  641. мир.повреждениеИгрока = new ПовреждениеИгрока(
  642. мир.события,
  643. мир.изображения.элементы.колобок,
  644. "игрок"
  645. );
  646. function ПереворачиватьМышь(события, имяМыши)
  647. {
  648. this.создать = function()
  649. {
  650. события.подписать(this);
  651. };
  652. this.обработатьСобытие = function(событие)
  653. {
  654. if (событие == "леваяСтенаМышь1")
  655. {
  656. /**/console.debug("соб. леваяСМ1");
  657. мир.разобрать({
  658. объекты: {
  659. мышь1: {
  660. вид: {
  661. transform: "scaleX(-1)",
  662. },
  663. },
  664. },
  665. });
  666. }
  667. else if (событие == "праваяСтенаМышь1")
  668. {
  669. /**/console.debug("соб. праваяСМ1");
  670. мир.разобрать({
  671. объекты: {
  672. мышь1: {
  673. вид: {
  674. transform: "scaleX(1)",
  675. },
  676. },
  677. },
  678. });
  679. }
  680. };
  681. // Конструктор.
  682. this.создать();
  683. }
  684. мир.переворачиватьМышь = new ПереворачиватьМышь(
  685. мир.события,
  686. "мышь1"
  687. );
  688. // // // //
  689. // Подпол и стены
  690. // // // //
  691. мир.разобрать({
  692. объекты: {
  693. полПодпола: {
  694. x: 0,
  695. y: 980,
  696. ширина: 2000,
  697. высота: 50,
  698. вид: {
  699. background: "url(р/отладка/основа.jpg)",
  700. //display: "none",
  701. },
  702. физика: {
  703. collisionFilter: {
  704. category: 10,
  705. },
  706. },
  707. },
  708. стенаЛевая: {
  709. x: -40,
  710. y: 0,
  711. высота: 1000,
  712. вид: {
  713. background: "url(р/отладка/основа.jpg)",
  714. display: "none",
  715. },
  716. },
  717. стенаПравая: {
  718. x: 2000,
  719. y: 0,
  720. высота: 1000,
  721. вид: {
  722. background: "url(р/отладка/основа.jpg)",
  723. display: "none",
  724. },
  725. },
  726. },
  727. });