Проверить Matter.js
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

527 рядки
14KB

  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: 350,
  100. высота: 20,
  101. ширина: 40,
  102. вид: {
  103. background: "url(р/отладка/основа.jpg)",
  104. //display: "none",
  105. },
  106. },
  107. сенсорИгрока: {
  108. x: 170,
  109. y: 350,
  110. высота: 70,
  111. ширина: 70,
  112. вид: {
  113. background: "url(р/отладка/основа.jpg)",
  114. },
  115. физика: {
  116. isSensor: true,
  117. },
  118. },
  119. игрок: {
  120. x: 100,
  121. y: 350,
  122. части: ["кирпич", "сенсорИгрока"],
  123. физика: {
  124. isStatic: false,
  125. inertia: Infinity,
  126. },
  127. },
  128. },
  129. игрок: {
  130. объект: "рт",
  131. //объект: "кирпич",
  132. скорость: [5, 12.5],
  133. клавиши: ["ArrowLeft", "ArrowRight", "ArrowUp"],
  134. },
  135. слежение: {
  136. /*
  137. колобок: {
  138. объект: "кирпич",
  139. изображение: "колобок",
  140. смещение: [-35, -60],
  141. скорость: 1,
  142. },
  143. */
  144. камера: {
  145. объект: "рт",
  146. //объект: "кирпич",
  147. скорость: 0.1,
  148. },
  149. },
  150. маскиПрыжков: {
  151. игрок: {
  152. объект: "рт",
  153. //объект: "кирпич",
  154. скорость: -1,
  155. маски: [1, 1|2],
  156. },
  157. },
  158. звуки: {
  159. прыжокИгрока: {
  160. события: ["игрок начал прыжок"],
  161. файл: "р/звуки/331381__qubodup__public-domain-jump-sound.wav",
  162. },
  163. },
  164. });
  165. // // // //
  166. // Платформы и объекты печи
  167. // // // //
  168. мир.разобрать({
  169. объекты: {
  170. фундаментПечи: {
  171. x: 570,
  172. y: 470,
  173. ширина: 550,
  174. вид: {
  175. background: "url(р/отладка/основа.jpg)",
  176. display: "none",
  177. },
  178. физика: {
  179. collisionFilter: {
  180. category: 2,
  181. },
  182. },
  183. },
  184. полка1: {
  185. x: 660,
  186. y: 335,
  187. ширина: 40,
  188. высота: 10,
  189. вид: {
  190. background: "url(р/отладка/основа.jpg)",
  191. display: "none",
  192. },
  193. физика: {
  194. collisionFilter: {
  195. category: 2,
  196. },
  197. },
  198. },
  199. полка2: {
  200. x: 767,
  201. y: 335,
  202. ширина: 40,
  203. высота: 10,
  204. вид: {
  205. background: "url(р/отладка/основа.jpg)",
  206. display: "none",
  207. },
  208. физика: {
  209. collisionFilter: {
  210. category: 2,
  211. },
  212. },
  213. },
  214. полка3: {
  215. x: 855,
  216. y: 335,
  217. ширина: 40,
  218. высота: 10,
  219. вид: {
  220. background: "url(р/отладка/основа.jpg)",
  221. display: "none",
  222. },
  223. физика: {
  224. collisionFilter: {
  225. category: 2,
  226. },
  227. },
  228. },
  229. полкаСамовара: {
  230. x: 975,
  231. y: 355,
  232. ширина: 70,
  233. высота: 10,
  234. вид: {
  235. background: "url(р/отладка/основа.jpg)",
  236. display: "none",
  237. },
  238. физика: {
  239. collisionFilter: {
  240. category: 2,
  241. },
  242. },
  243. },
  244. лежанкаПечки: {
  245. x: 600,
  246. y: 242,
  247. ширина: 330,
  248. высота: 10,
  249. вид: {
  250. background: "url(р/отладка/основа.jpg)",
  251. display: "none",
  252. },
  253. физика: {
  254. collisionFilter: {
  255. category: 2,
  256. },
  257. },
  258. },
  259. основаниеТрубыПечки: {
  260. x: 937,
  261. y: 175,
  262. ширина: 130,
  263. высота: 10,
  264. вид: {
  265. background: "url(р/отладка/основа.jpg)",
  266. display: "none",
  267. },
  268. физика: {
  269. collisionFilter: {
  270. category: 2,
  271. },
  272. },
  273. },
  274. самовар: {
  275. x: 650,
  276. y: 300,
  277. ширина: 70,
  278. высота: 120,
  279. вид: {
  280. background: "url(р/вещи/самовар.png) no-repeat scroll 0% 0% / contain",
  281. },
  282. физика: {
  283. isStatic: false,
  284. //inertia: Infinity,
  285. },
  286. },
  287. },
  288. });
  289. // // // //
  290. // Подкидывание стрелы
  291. // // // //
  292. мир.разобрать({
  293. объекты: {
  294. сенсор: {
  295. x: 1280,
  296. y: 400,
  297. ширина: 120,
  298. вид: {
  299. background: "url(р/отладка/основа.jpg)",
  300. display: "none",
  301. },
  302. физика: {
  303. isStatic: true,
  304. isSensor: true,
  305. },
  306. },
  307. стрела: {
  308. x: 1230,
  309. y: 350,
  310. высота: 30,
  311. ширина: 200,
  312. вид: {
  313. display: "inline-block",
  314. background: "url(р/вещи/стрела.png) no-repeat scroll 0% 0% / contain",
  315. transform: "scaleX(-1)",
  316. },
  317. физика: {
  318. isStatic: false,
  319. inertia: Infinity,
  320. collisionFilter: {
  321. category: 4,
  322. },
  323. },
  324. },
  325. лук: {
  326. x: 1250,
  327. y: 200,
  328. ширина: 100,
  329. вид: {
  330. background: "url(р/отладка/основа.jpg)",
  331. display: "none",
  332. },
  333. физика: {
  334. isStatic: true,
  335. collisionFilter: {
  336. category: 4,
  337. },
  338. },
  339. },
  340. },
  341. столкновения: {
  342. стрелаНачало: {
  343. объекты: ["кирпич", "сенсор"],
  344. событие: "сенсор стрелы",
  345. },
  346. стрелаКонец: {
  347. объекты: ["стрела", "лук"],
  348. событие: "стрела и лук",
  349. },
  350. },
  351. маскиПрыжков: {
  352. стрела: {
  353. объект: "стрела",
  354. скорость: -1,
  355. маски: [0, 2|4]
  356. },
  357. },
  358. звуки: {
  359. зарядкаЛука: {
  360. события: ["закинули стрелу"],
  361. файл: "р/звуки/543927__eminyildirim__pistol-gun-cocking.wav",
  362. },
  363. },
  364. });
  365. function ПодкидываниеСтрелы() {
  366. this.создать = function() {
  367. this.времяСтрелы = null;
  368. this.времяПриземления = null;
  369. this.подкинули = false;
  370. this.закинули = false;
  371. this.завершить = null;
  372. мир.события.подписать(this);
  373. };
  374. this.обработатьСобытие = function(событие) {
  375. if (событие == "сенсор стрелы")
  376. {
  377. this.времяСтрелы = мир.физика.движок.timing.timestamp;
  378. this.подкинуть();
  379. }
  380. else if (событие == "игрок приземлился")
  381. {
  382. this.времяПриземления = мир.физика.движок.timing.timestamp;
  383. this.подкинуть();
  384. }
  385. else if (событие == "игрок начал прыжок")
  386. {
  387. this.времяСтрелы = null;
  388. this.времяПриземления = null;
  389. this.подкинули = false;
  390. }
  391. else if (
  392. (событие == "стрела и лук") &&
  393. this.закинули &&
  394. this.завершить
  395. ) {
  396. мир.события.уведомить("закинули стрелу");
  397. мир.события.отписать(this);
  398. this.завершить();
  399. }
  400. };
  401. this.подкинуть = function() {
  402. if (
  403. this.подкинули ||
  404. !this.времяСтрелы ||
  405. !this.времяПриземления ||
  406. Math.abs(this.времяСтрелы - this.времяПриземления) > 0.00001 ||
  407. Math.abs(мир.объекты.тела.стрела.velocity.y) > 0.00001
  408. ) {
  409. return;
  410. }
  411. this.подкинули = true;
  412. Matter.Body.setVelocity(
  413. мир.объекты.тела.стрела,
  414. { x: 0, y: -мир.игрок.приземление.скорость * 1.2 }
  415. );
  416. if (мир.игрок.приземление.скорость > 16)
  417. {
  418. this.закинули = true;
  419. }
  420. };
  421. // Конструктор.
  422. this.создать();
  423. }
  424. мир.подкидываниеСтрелы = new ПодкидываниеСтрелы();
  425. мир.подкидываниеСтрелы.завершить = function() {
  426. мир.подкидываниеСтрелы = null;
  427. };
  428. // Запустить звук избы
  429. мир.события.уведомить("вошли в избу");
  430. // // // //
  431. // Отладка событий
  432. // // // //
  433. function ОтладкаСобытий() {
  434. this.обработатьСобытие = function(событие) {
  435. if (событие.startsWith("игрокПаук"))
  436. {
  437. console.debug("событие", событие);
  438. }
  439. };
  440. // Конструктор.
  441. мир.события.подписать(this);
  442. }
  443. мир.отладкаСобытий = new ОтладкаСобытий();
  444. // // // //
  445. // Пауки
  446. // // // //
  447. мир.разобрать({
  448. объекты: {
  449. паук1: {
  450. x: 680,
  451. y: 300,
  452. ширина: 30,
  453. вид: {
  454. background: "url(р/животные/паук.png) no-repeat scroll 0% 0% / contain",
  455. },
  456. физика: {
  457. isStatic: false,
  458. isSensor: true,
  459. },
  460. },
  461. },
  462. столкновения: {
  463. игрокПаук1: {
  464. объекты: ["кирпич", "паук1"],
  465. событие: "игрокПаук1",
  466. },
  467. проверкаСенсораИгрокаРТ: {
  468. объекты: ["рт", "паук1"],
  469. событие: "игрокПаукРТ",
  470. },
  471. проверкаСенсораИгрокаРТ1: {
  472. объекты: ["рт1", "паук1"],
  473. событие: "игрокПаукРТ1",
  474. },
  475. проверкаСенсораИгрокаРТ2: {
  476. объекты: ["рт2", "паук1"],
  477. событие: "игрокПаукРТ2",
  478. },
  479. },
  480. движение: {
  481. паук1: {
  482. объекты: ["паук1"],
  483. скорость: [0.7, 1],
  484. x: [610, 1080],
  485. y: [350, 450],
  486. },
  487. },
  488. });