Проверить Matter.js
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

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