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

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