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

432 lines
12KB

  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. // // // //
  77. мир.разобрать({
  78. изображения: {
  79. колобок: {
  80. ширина: 70,
  81. высота: 70,
  82. вид: {
  83. background: "url(р/колобок/колобок_неподвижен.png)",
  84. "z-index": 10,
  85. },
  86. },
  87. },
  88. объекты: {
  89. кирпич: {
  90. x: 1170,
  91. y: 350,
  92. высота: 20,
  93. ширина: 40,
  94. вид: {
  95. background: "url(р/отладка/основа.jpg)",
  96. display: "none",
  97. },
  98. физика: {
  99. isStatic: false,
  100. inertia: Infinity,
  101. },
  102. },
  103. },
  104. игрок: {
  105. объект: "кирпич",
  106. скорость: [5, 12.5],
  107. клавиши: ["ArrowLeft", "ArrowRight", "ArrowUp"],
  108. },
  109. слежение: {
  110. колобок: {
  111. объект: "кирпич",
  112. изображение: "колобок",
  113. смещение: [-35, -65],
  114. скорость: 1,
  115. },
  116. камера: {
  117. объект: "кирпич",
  118. скорость: 0.1,
  119. },
  120. },
  121. маскиПрыжков: {
  122. игрок: {
  123. объект: "кирпич",
  124. скорость: -1,
  125. маски: [1, 1|2],
  126. },
  127. },
  128. });
  129. // // // //
  130. // Платформы и объекты печи
  131. // // // //
  132. мир.разобрать({
  133. объекты: {
  134. фундаментПечи: {
  135. x: 570,
  136. y: 470,
  137. ширина: 550,
  138. вид: {
  139. background: "url(р/отладка/основа.jpg)",
  140. display: "none",
  141. },
  142. физика: {
  143. collisionFilter: {
  144. category: 2,
  145. },
  146. },
  147. },
  148. полка1: {
  149. x: 660,
  150. y: 335,
  151. ширина: 40,
  152. высота: 10,
  153. вид: {
  154. background: "url(р/отладка/основа.jpg)",
  155. display: "none",
  156. },
  157. физика: {
  158. collisionFilter: {
  159. category: 2,
  160. },
  161. },
  162. },
  163. полка2: {
  164. x: 767,
  165. y: 335,
  166. ширина: 40,
  167. высота: 10,
  168. вид: {
  169. background: "url(р/отладка/основа.jpg)",
  170. display: "none",
  171. },
  172. физика: {
  173. collisionFilter: {
  174. category: 2,
  175. },
  176. },
  177. },
  178. полка3: {
  179. x: 855,
  180. y: 335,
  181. ширина: 40,
  182. высота: 10,
  183. вид: {
  184. background: "url(р/отладка/основа.jpg)",
  185. display: "none",
  186. },
  187. физика: {
  188. collisionFilter: {
  189. category: 2,
  190. },
  191. },
  192. },
  193. полкаСамовара: {
  194. x: 975,
  195. y: 355,
  196. ширина: 70,
  197. высота: 10,
  198. вид: {
  199. background: "url(р/отладка/основа.jpg)",
  200. display: "none",
  201. },
  202. физика: {
  203. collisionFilter: {
  204. category: 2,
  205. },
  206. },
  207. },
  208. лежанкаПечки: {
  209. x: 600,
  210. y: 242,
  211. ширина: 330,
  212. высота: 10,
  213. вид: {
  214. background: "url(р/отладка/основа.jpg)",
  215. display: "none",
  216. },
  217. физика: {
  218. collisionFilter: {
  219. category: 2,
  220. },
  221. },
  222. },
  223. основаниеТрубыПечки: {
  224. x: 937,
  225. y: 175,
  226. ширина: 130,
  227. высота: 10,
  228. вид: {
  229. background: "url(р/отладка/основа.jpg)",
  230. display: "none",
  231. },
  232. физика: {
  233. collisionFilter: {
  234. category: 2,
  235. },
  236. },
  237. },
  238. самовар: {
  239. x: 650,
  240. y: 300,
  241. ширина: 70,
  242. высота: 120,
  243. вид: {
  244. background: "url(р/вещи/самовар.png) no-repeat scroll 0% 0% / contain",
  245. },
  246. физика: {
  247. isStatic: false,
  248. //inertia: Infinity,
  249. },
  250. },
  251. },
  252. });
  253. // // // //
  254. // Подкидывание стрелы
  255. // // // //
  256. мир.разобрать({
  257. объекты: {
  258. сенсор: {
  259. x: 1280,
  260. y: 400,
  261. ширина: 120,
  262. вид: {
  263. background: "url(р/отладка/основа.jpg)",
  264. display: "none",
  265. },
  266. физика: {
  267. isStatic: true,
  268. isSensor: true,
  269. },
  270. },
  271. стрела: {
  272. x: 1230,
  273. y: 350,
  274. высота: 30,
  275. ширина: 200,
  276. вид: {
  277. display: "inline-block",
  278. background: "url(р/вещи/стрела.png) no-repeat scroll 0% 0% / contain",
  279. transform: "scaleX(-1)",
  280. },
  281. физика: {
  282. isStatic: false,
  283. inertia: Infinity,
  284. collisionFilter: {
  285. category: 4,
  286. },
  287. },
  288. },
  289. лук: {
  290. x: 1250,
  291. y: 200,
  292. ширина: 100,
  293. вид: {
  294. background: "url(р/отладка/основа.jpg)",
  295. display: "none",
  296. },
  297. физика: {
  298. isStatic: true,
  299. collisionFilter: {
  300. category: 4,
  301. },
  302. },
  303. },
  304. },
  305. столкновения: {
  306. стрелаНачало: {
  307. объекты: ["кирпич", "сенсор"],
  308. событие: "сенсор стрелы",
  309. },
  310. стрелаКонец: {
  311. объекты: ["стрела", "лук"],
  312. событие: "стрела и лук",
  313. },
  314. },
  315. маскиПрыжков: {
  316. стрела: {
  317. объект: "стрела",
  318. скорость: -1,
  319. маски: [0, 2|4]
  320. },
  321. },
  322. });
  323. function ПодкидываниеСтрелы() {
  324. this.создать = function() {
  325. this.времяСтрелы = null;
  326. this.времяПриземления = null;
  327. this.подкинули = false;
  328. this.закинули = false;
  329. this.завершить = null;
  330. мир.события.подписать(this);
  331. };
  332. this.обработатьСобытие = function(событие) {
  333. if (событие == "сенсор стрелы")
  334. {
  335. this.времяСтрелы = мир.физика.движок.timing.timestamp;
  336. this.подкинуть();
  337. }
  338. else if (событие == "игрок приземлился")
  339. {
  340. this.времяПриземления = мир.физика.движок.timing.timestamp;
  341. this.подкинуть();
  342. }
  343. else if (событие == "игрок начал прыжок")
  344. {
  345. this.времяСтрелы = null;
  346. this.времяПриземления = null;
  347. this.подкинули = false;
  348. }
  349. else if (
  350. (событие == "стрела и лук") &&
  351. this.закинули &&
  352. this.завершить
  353. ) {
  354. мир.события.уведомить("закинули стрелу");
  355. мир.события.отписать(this);
  356. this.завершить();
  357. }
  358. };
  359. this.подкинуть = function() {
  360. if (
  361. this.подкинули ||
  362. !this.времяСтрелы ||
  363. !this.времяПриземления ||
  364. Math.abs(this.времяСтрелы - this.времяПриземления) > 0.00001 ||
  365. Math.abs(мир.объекты.тела.стрела.velocity.y) > 0.00001
  366. ) {
  367. return;
  368. }
  369. this.подкинули = true;
  370. Matter.Body.setVelocity(
  371. мир.объекты.тела.стрела,
  372. { x: 0, y: -мир.игрок.приземление.скорость * 1.2 }
  373. );
  374. if (мир.игрок.приземление.скорость > 16)
  375. {
  376. this.закинули = true;
  377. }
  378. };
  379. // Конструктор.
  380. this.создать();
  381. }
  382. мир.подкидываниеСтрелы = new ПодкидываниеСтрелы();
  383. мир.подкидываниеСтрелы.завершить = function() {
  384. мир.подкидываниеСтрелы = null;
  385. /**/var audio = new Audio("р/звуки/543927__eminyildirim__pistol-gun-cocking.wav");
  386. /**/audio.play();
  387. /**/console.debug("воспроизвели аудио");
  388. };
  389. // // // //
  390. // Отладка событий
  391. // // // //
  392. function ОтладкаСобытий() {
  393. this.обработатьСобытие = function(событие) {
  394. if (событие == "закинули стрелу")
  395. {
  396. console.debug("событие", событие);
  397. }
  398. };
  399. // Конструктор.
  400. мир.события.подписать(this);
  401. }
  402. мир.отладкаСобытий = new ОтладкаСобытий();