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

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