@@ -2,7 +2,7 @@ | |||
<html> | |||
<head> | |||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> | |||
<title>К 0.5.0</title> | |||
<title>К 0.6.0</title> | |||
<script src="https://cdn.jsdelivr.net/npm/phaser@3.54.0/dist/phaser.min.js"></script> | |||
<style> | |||
html, body { | |||
@@ -24,8 +24,6 @@ | |||
{ | |||
мир.сцена.physics.add.collider(мир.вещи, мир.каркас); | |||
мир.сцена.physics.add.collider(мир.вещи, мир.платформы); | |||
//мир.сцена.physics.add.collider(мир.враги, мир.каркас); | |||
//мир.сцена.physics.add.collider(мир.враги, мир.платформы); | |||
}; | |||
@@ -25,12 +25,13 @@ | |||
СоздатьКолобка = мир => | |||
{ | |||
мир.колобок = мир.сцена.physics.add.sprite(100, 500, "колобок"); | |||
//мир.колобок = мир.сцена.physics.add.sprite(1000, 500, "колобок"); | |||
var x = 100; | |||
var x = 1300; | |||
мир.колобок = мир.сцена.physics.add.sprite(x, 500, "колобок"); | |||
мир.колобок.depth = 10; | |||
мир.колобок.body.setSize(50); | |||
// Портит анимацию прыжков! | |||
//мир.колобок.setBounceY(0.1); | |||
// мир.колобок.setBounceY(0.1); | |||
// Следить за колобком камерой. | |||
const камера = мир.сцена.cameras.main; | |||
@@ -41,6 +42,8 @@ | |||
мигание: { }, | |||
прыгучесть: -570, | |||
коэффициентПрыгучести: 1, | |||
прыжок: false, | |||
скоростьПадения: 0, | |||
}; | |||
}; | |||
@@ -111,11 +114,12 @@ | |||
} | |||
мир.колобок.setVelocityX(x); | |||
if (мир.управление.прыжок && мир.колобок.body.touching.down) | |||
if (мир.управление.прыжок && !мир.состояниеКолобка.прыжок) | |||
{ | |||
мир.состояниеКолобка.прыжок = true; | |||
var скорость = мир.состояниеКолобка.прыгучесть * мир.состояниеКолобка.коэффициентПрыгучести; | |||
мир.колобок.setVelocityY(скорость); | |||
мир.сцена.sound.play("прыжок"); | |||
мир.уведомить("колобок начал прыжок"); | |||
} | |||
}; | |||
@@ -123,6 +127,38 @@ | |||
// // // // | |||
ВоспроизвестиЗвукПрыжка = мир => | |||
{ | |||
мир.сцена.sound.play("прыжок"); | |||
}; | |||
// // // // | |||
ОпределитьОкончаниеПрыжкаКолобка = мир => | |||
{ | |||
if (!мир.состояниеКолобка.прыжок) | |||
{ | |||
return; | |||
} | |||
var скоростьПадения = мир.колобок.body.velocity.y; | |||
if ( | |||
(мир.состояниеКолобка.скоростьПадения > 40) && | |||
(скоростьПадения == 0) && | |||
мир.колобок.body.touching.down | |||
) { | |||
мир.состояниеКолобка.прыжок = false; | |||
мир.уведомить("колобок закончил прыжок"); | |||
} | |||
мир.состояниеКолобка.скоростьПадения = скоростьПадения; | |||
}; | |||
// // // // | |||
АнимироватьКолобка = мир => | |||
{ | |||
var есть = ""; | |||
@@ -132,7 +168,7 @@ | |||
} | |||
var надо = "колобок-неподвижен"; | |||
if (мир.управление && мир.управление.прыжок && !мир.колобок.body.touching.down) | |||
if (мир.состояниеКолобка.прыжок) | |||
{ | |||
надо = "колобок-прыжок"; | |||
} | |||
@@ -264,6 +300,19 @@ | |||
}; | |||
// // // // | |||
ВывестиНачалоПрыжкаВКонсоль = мир => | |||
{ | |||
console.debug("начало прыжка"); | |||
}; | |||
ВывестиОкончаниеПрыжкаВКонсоль = мир => | |||
{ | |||
console.debug("окончание прыжка. скорость:", мир.состояниеКолобка.скоростьПадения); | |||
}; | |||
/* | |||
* | |||
* Последовательность | |||
@@ -283,8 +332,14 @@ | |||
обновить сцену | |||
переместить колобка | |||
анимировать колобка | |||
определить окончание прыжка колобка | |||
мигать колобка | |||
остановить передвижение вещей | |||
колобок начал прыжок | |||
воспроизвести звук прыжка | |||
вывести начало прыжка в консоль | |||
колобок закончил прыжок | |||
вывести окончание прыжка в консоль | |||
начали мигать колобка | |||
отключить столкновение с платформами и вещами | |||
уменьшить прыгучесть колобка | |||
@@ -8,6 +8,7 @@ | |||
ЗагрузитьРесурсыИзбы = мир => | |||
{ | |||
мир.сцена.load.audio("звук-избы", "ресурсы/звуки/387922__setuniman__scheming-1o95.mp3"); | |||
мир.сцена.load.audio("звук-зарядки", "ресурсы/звуки/543927__eminyildirim__pistol-gun-cocking.wav"); | |||
мир.сцена.load.image("основа", "ресурсы/отладка/основа.jpg"); | |||
мир.сцена.load.image("линия", "ресурсы/отладка/линия_вертикальная.png"); | |||
@@ -17,6 +18,7 @@ | |||
мир.сцена.load.image("мышь", "ресурсы/животные/мышь.png"); | |||
мир.сцена.load.image("мышь", "ресурсы/животные/мышь.png"); | |||
мир.сцена.load.image("самовар", "ресурсы/вещи/самовар.png"); | |||
мир.сцена.load.image("стрела", "ресурсы/вещи/стрела.png"); | |||
}; | |||
@@ -128,11 +130,13 @@ | |||
y: 180, | |||
ширина: 12, | |||
}, | |||
// Стол. | |||
{ | |||
x: 1270, | |||
y: 427, | |||
ширина: 70, | |||
}, | |||
// Окно. | |||
{ | |||
x: 1690, | |||
y: 375, | |||
@@ -192,22 +196,6 @@ | |||
низ: 550, | |||
верх: 270, | |||
}, | |||
/* | |||
{ | |||
x: 740, | |||
y: 445, | |||
скорость: 65, | |||
низ: 550, | |||
верх: 270, | |||
}, | |||
{ | |||
x: 830, | |||
y: 375, | |||
скорость: 80, | |||
низ: 550, | |||
верх: 270, | |||
}, | |||
*/ | |||
{ | |||
x: 785, | |||
y: 375, | |||
@@ -320,6 +308,96 @@ | |||
}; | |||
// // // // | |||
СоздатьСтрелы = мир => | |||
{ | |||
мир.стрелаЗаряжена = false; | |||
// Кучка стрел. | |||
var группаСтрел = мир.сцена.physics.add.staticGroup(); | |||
var стрелы = группаСтрел.create(1270, 405, "основа").setOrigin(0, 0); | |||
стрелы.setScale(25, 2).refreshBody(); | |||
стрелы.body.checkCollision.down = false; | |||
стрелы.setVisible(false); | |||
var столкновение = мир.сцена.physics.add.collider(мир.колобок, стрелы); | |||
столкновение.collideCallback = function(a, b) { | |||
мир.состояниеКолобка.прыжокПоСтрелам = true; | |||
}; | |||
// Стрела в луку. | |||
мир.стрелаКЛуку = мир.сцена.physics.add.sprite(1250, 380, "стрела").setOrigin(0, 0); | |||
мир.стрелаКЛуку.setScale(0.5, 0.5).refreshBody(); | |||
мир.стрелаКЛуку.depth = 15; | |||
// Учитываем платформы. | |||
мир.сцена.physics.add.collider(мир.стрелаКЛуку, мир.каркас); | |||
мир.сцена.physics.add.collider(мир.стрелаКЛуку, мир.платформы); | |||
// Платформа для стрелы у лука, чтобы стрела оставалась в луке. | |||
var платформы = мир.сцена.physics.add.staticGroup(); | |||
var платформаЛука = платформы.create(1280, 200, "основа").setOrigin(0, 0); | |||
платформаЛука.body.checkCollision.down = false; | |||
var столкновениеЛука = мир.сцена.physics.add.collider(мир.стрелаКЛуку, платформаЛука); | |||
платформаЛука.setVisible(false); | |||
// Определение заряда стрелы. | |||
столкновениеЛука.collideCallback = function заряд(a, b) { | |||
if (мир.стрелаКЛуку.body.touching.down && !мир.стрелаЗаряжена) | |||
{ | |||
мир.стрелаЗаряжена = true; | |||
мир.уведомить("стрела заряжена"); | |||
} | |||
} | |||
}; | |||
// // // // | |||
ОтследитьПрыжокПоСтрелам = мир => | |||
{ | |||
мир.состояниеКолобка.прыжокПоСтрелам = null; | |||
}; | |||
// // // // | |||
ПроверитьНаличиеПрыжкаПоСтрелам = мир => | |||
{ | |||
if (!мир.состояниеКолобка.прыжокПоСтрелам) | |||
{ | |||
return; | |||
} | |||
мир.уведомить("прыжок по платформе стрел"); | |||
}; | |||
// // // // | |||
ПодкидыватьСтрелуКЛуку = мир => | |||
{ | |||
if (!мир.стрелаКЛуку.body.touching.down || мир.стрелаЗаряжена) | |||
{ | |||
return; | |||
} | |||
var скорость = мир.состояниеКолобка.скоростьПадения * 0.9; | |||
мир.стрелаКЛуку.setVelocityY(-скорость); | |||
}; | |||
// // // // | |||
ВоспроизвестиЗвукЗарядкиСтрелы = мир => | |||
{ | |||
мир.сцена.sound.play("звук-зарядки"); | |||
}; | |||
/* | |||
* | |||
* Последовательность | |||
@@ -338,8 +416,17 @@ | |||
создать вещи | |||
создать пауков | |||
создать мышей | |||
создать стрелы | |||
обновить сцену | |||
анимировать пауков | |||
анимировать мышей | |||
колобок начал прыжок | |||
отследить прыжок по стрелам | |||
колобок закончил прыжок | |||
проверить наличие прыжка по стрелам | |||
прыжок по платформе стрел | |||
подкидывать стрелу к луку | |||
стрела заряжена | |||
воспроизвести звук зарядки стрелы | |||
`); | |||
@@ -5,3 +5,4 @@ | |||
* https://freesound.org/people/omerbhatti34/sounds/521552/ | |||
* https://freesound.org/people/Czarcazas/sounds/330800/ | |||
* https://freesound.org/people/Kneeling/sounds/448004/ | |||
* https://freesound.org/people/EminYILDIRIM/sounds/543927/ |