Проверить Matter.js
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

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