Browse Source

better

tags/4.1
parent
commit
0b3f204766
5 changed files with 72 additions and 36 deletions
  1. +1
    -0
      4.1/игра.html
  2. +14
    -6
      4.1/игра/080.Анимации.js
  3. +3
    -12
      4.1/игра/190.Состояния.js
  4. +52
    -16
      4.1/игра/200.Сцена.js
  5. +2
    -2
      4.1/игра/700.Игра.js

+ 1
- 0
4.1/игра.html View File

@@ -34,6 +34,7 @@
<script src="игра/140.Тела.js"></script> <script src="игра/140.Тела.js"></script>
<script src="игра/160.Слежение.js"></script> <script src="игра/160.Слежение.js"></script>
<script src="игра/180.Объекты.js"></script> <script src="игра/180.Объекты.js"></script>
<script src="игра/190.Состояния.js"></script>
<script src="игра/200.Сцена.js"></script> <script src="игра/200.Сцена.js"></script>
<script src="игра/220.Мышь.js"></script> <script src="игра/220.Мышь.js"></script>
<script src="игра/240.Столкновения.js"></script> <script src="игра/240.Столкновения.js"></script>


+ 14
- 6
4.1/игра/080.Анимации.js View File

@@ -8,14 +8,11 @@ function Анимации(события)


this.запустить = function(имя, элемент) this.запустить = function(имя, элемент)
{ {
let ключ = `${элемент.id}-${имя}`;
/**/console.debug("ИГР Анимации.запустить", имя, элемент, this.анимации);
// Останавливаем прошлый экземпляр этой анимации на том же элементе. // Останавливаем прошлый экземпляр этой анимации на том же элементе.
if (ключ in this.анимации)
{
this.анимации[ключ].остановить();
delete this.анимации[ключ];
}
this.остановить(имя, элемент);
// Запускаем новый экземпляр анимации на том же элементе. // Запускаем новый экземпляр анимации на том же элементе.
let ключ = `${элемент.id}`;//-${имя}`;
this.анимации[ключ] = new Анимация(элемент, this.задано[имя]); this.анимации[ключ] = new Анимация(элемент, this.задано[имя]);
} }


@@ -37,6 +34,17 @@ function Анимации(события)
события.уведомить(`анимации/${имя}`); события.уведомить(`анимации/${имя}`);
}; };


this.остановить = function(имя, элемент)
{
let ключ = `${элемент.id}`;//-${имя}`;
if (ключ in this.анимации)
{
this.анимации[ключ].остановить();
delete this.анимации[ключ];
}
/**/console.debug("ИГР Анимации.остановить", имя, элемент, this.анимации);
}

// Конструктор. // Конструктор.
this.создать(); this.создать();
}; };

+ 3
- 12
4.1/игра/190.Состояния.js View File

@@ -1,4 +1,4 @@
function Состояния()
function Состояния(состояние)
{ {
this.создать = function() this.создать = function()
{ {
@@ -7,17 +7,8 @@ function Состояния()


this.применить = function(имя) this.применить = function(имя)
{ {
/*
let ключ = `${элемент.id}-${имя}`;
// Останавливаем прошлый экземпляр этой анимации на том же элементе.
if (ключ in this.анимации)
{
this.анимации[ключ].остановить();
delete this.анимации[ключ];
}
// Запускаем новый экземпляр анимации на том же элементе.
this.анимации[ключ] = new Анимация(элемент, this.задано[имя]);
*/
console.debug("ИГР Состояния.применить", имя, this.задано[имя]);
состояние.разобратьВыпрямленный(this.задано[имя]);
} }


this.обработатьКлюч = function(ключ, путь, значение) this.обработатьКлюч = function(ключ, путь, значение)


+ 52
- 16
4.1/игра/200.Сцена.js View File

@@ -1,12 +1,10 @@
function Сцена(состояние, события, тела, адресИгры)
function Сцена(состояние, состояниЯ, события, тела, адресИгры)
{ {
this.создать = function() this.создать = function()
{ {
this.умолчание = {
скорость: [1, 1],
};
this.задано = {}; this.задано = {};
this.сцены = null; this.сцены = null;
this.состояниеИгрока = null;
события.подписать(this); события.подписать(this);
}; };


@@ -38,6 +36,38 @@ function Сцена(состояние, события, тела, адресИг
запрос.send(); запрос.send();
}; };


this.задатьСостояниеИгрока = function(идёт, направление)
{
let стоятьЛ = this.задано["игрок.стоять.0"];
let стоятьП = this.задано["игрок.стоять.1"];
let идтиЛ = this.задано["игрок.идти.0"];
let идтиП = this.задано["игрок.идти.1"];
if (!стоятьЛ || !стоятьП || !идтиЛ || !идтиП)
{
return;
}

var название = идтиЛ;
if (идёт && направление > 0)
{
название = идтиП;
}
else if (!идёт && направление < 0)
{
название = стоятьЛ;
}
else if (!идёт && направление > 0)
{
название = стоятьП;
}

if (this.состояниеИгрока != название)
{
состояниЯ.применить(название);
this.состояниеИгрока = название;
}
};

this.обновить = function() this.обновить = function()
{ {
this.переместитьИгрока(); this.переместитьИгрока();
@@ -60,19 +90,17 @@ function Сцена(состояние, события, тела, адресИг
this.обработатьНажатиеМышиУказатьИНажать = function(x, y, указатель) this.обработатьНажатиеМышиУказатьИНажать = function(x, y, указатель)
{ {
var тип = this.задано["тип"];
var игрок = this.задано["игрок"];
var цель = this.задано["цель"];
if (!тип || !игрок || !цель || тип != "указать и нажать")
let цель = this.задано["цель"];
if (!this.типИгрыУказатьИНажать() || !цель)
{ {
return; return;
} }

var тело = тела.тела[цель];
let тело = тела.тела[цель];
if (!тело) if (!тело)
{ {
return; return;
} }

var пр = [ var пр = [
тело.bounds.min.x, тело.bounds.min.x,
тело.bounds.min.y, тело.bounds.min.y,
@@ -112,15 +140,15 @@ function Сцена(состояние, события, тела, адресИг


this.переместитьИгрока = function() this.переместитьИгрока = function()
{ {
let тип = this.задано["тип"];
let игрок = this.задано["игрок"];
let цель = this.задано["цель"]; let цель = this.задано["цель"];
let скоростьX = this.задано["скорость.0"];
if (!тип || !игрок || !цель || !скоростьX || тип != "указать и нажать")
let объект = this.задано["игрок.объект"];
let скоростьX = this.задано["игрок.скорость.0"];
if (!this.типИгрыУказатьИНажать() || !цель || !объект || !скоростьX)
{ {
return; return;
} }


let игрок = `объекты-${объект}`;
let телоЦели = тела.тела[цель]; let телоЦели = тела.тела[цель];
let телоИгрока = тела.тела[игрок]; let телоИгрока = тела.тела[игрок];
if (!телоЦели || !телоИгрока) if (!телоЦели || !телоИгрока)
@@ -132,13 +160,15 @@ function Сцена(состояние, события, тела, адресИг
let цельX = телоЦели.position.x; let цельX = телоЦели.position.x;
let ширина = телоЦели.bounds.max.x - телоЦели.bounds.min.x; let ширина = телоЦели.bounds.max.x - телоЦели.bounds.min.x;
let расстояние = цельX - игрокX; let расстояние = цельX - игрокX;
let направление = расстояние > 0 ? 1 : -1;


if (Math.abs(расстояние) < ширина / 2) if (Math.abs(расстояние) < ширина / 2)
{ {
this.задатьСостояниеИгрока(false, направление);
return; return;
} }
let направление = расстояние > 0 ? 1 : -1;
this.задатьСостояниеИгрока(true, направление);
Matter.Sleeping.set(телоИгрока, false); Matter.Sleeping.set(телоИгрока, false);
Matter.Body.setVelocity(телоИгрока, { x: скоростьX * направление, y: 0 }); Matter.Body.setVelocity(телоИгрока, { x: скоростьX * направление, y: 0 });
}; };
@@ -149,6 +179,12 @@ function Сцена(состояние, события, тела, адресИг
eval(код); eval(код);
}; };


this.типИгрыУказатьИНажать = function()
{
var тип = this.задано["тип"];
return тип && тип == "указать и нажать";
};

// Конструктор. // Конструктор.
this.создать(); this.создать();
}; };

+ 2
- 2
4.1/игра/700.Игра.js View File

@@ -19,9 +19,9 @@ function Игра()
мир.тела = new Тела(мир.события, мир.физика, мир.физдвижок.world); мир.тела = new Тела(мир.события, мир.физика, мир.физдвижок.world);
мир.слежение = new Слежение(мир.состояние, мир.изображения, мир.тела); мир.слежение = new Слежение(мир.состояние, мир.изображения, мир.тела);
мир.объекты = new Объекты(мир.состояние, мир.события); мир.объекты = new Объекты(мир.состояние, мир.события);
мир.состояниЯ = new Состояния();
мир.состояниЯ = new Состояния(мир.состояние);
let адресИгры = window.location.pathname + "/../игра.html?z64="; let адресИгры = window.location.pathname + "/../игра.html?z64=";
мир.сцена = new Сцена(мир.состояние, мир.события, мир.тела, адресИгры);
мир.сцена = new Сцена(мир.состояние, мир.состояниЯ, мир.события, мир.тела, адресИгры);
мир.мышь = new Мышь(мир.события); мир.мышь = new Мышь(мир.события);
мир.столкновения = new Столкновения(мир.события, мир.тела, мир.физдвижок); мир.столкновения = new Столкновения(мир.события, мир.тела, мир.физдвижок);
мир.подсказки = new Подсказки(); мир.подсказки = new Подсказки();


Loading…
Cancel
Save