PDA

Просмотр полной версии : Как определить столкновение экземпляра с самим собой?


DoctorQueb
29.05.2013, 20:45
Доброго времени суток.
Возник интересный вопрос по поводу того, как определить столкновение экземпляра с самим собой?
Нужно для создания передвигаемых блоков, т.е. когда один блок касается другого, он начинает "подвигать" его.
Имеется пока что простенький код для игрока, заставляя его передвигать блоки

var speed = 6;

var blocks = [];

hero.onEnterFrame = function()
{
if (Key.isDown(Key.LEFT))
{
this._x -= speed;
}
if (Key.isDown(Key.RIGHT))
{
this._x += speed;
}
if (Key.isDown(Key.UP))
{
this._y -= speed;
}
if (Key.isDown(Key.DOWN))
{
this._y += speed;
}
for (var i = 0; i<=blocks.length; i++)
{
bl = blocks[i];
rad = bl._width/2;
if (this.hitTest(bl._x-rad, bl._y, true))
{
bl._x += 2;
this._x -= rad/5;
}
if (this.hitTest(bl._x+rad, bl._y, true))
{
bl._x -= 2;
this._x += rad/5;
}
if (this.hitTest(bl._x, bl._y-rad, true))
{
bl._y += 2;
this._y -= rad/5;
}
if (this.hitTest(bl._x, bl._y+rad, true))
{
bl._y -= 2;
this._y += rad/5;
}
}
};

Заранее спасибо

dark256
30.05.2013, 00:00
Коллега..... представьте..... вот вы идете по улице.... и налетаете на самого себя....
Это возможно?
Тут точно также. Вероятно, вы имели в виду "налететь на такой же объект"?

Введите в свойства объекта некий ID..... Типа
any_block.id = 1
any_block.id = 2
...
any_block.id = N

И если при хиттесте id совпадают - то это значит что "сам на себя" :)

deep70
30.05.2013, 11:54
Коллега..... представьте..... вот вы идете по улице.... и налетаете на самого себя....
Это возможно? <...>

игра Snake, например, иллюстрирует самоколлизию.
А еще это можно наблюдать в Transport Tycoon Deluxe (или ныне в OpenTTD)

dark256
30.05.2013, 13:17
Питон сделан из множества объектов, как бы....
Соответственно в данном случае речь может идти о пересечении множеств.
Опишите алгоритм самоколлизии для питона из ОДНОГО дискретного неморфирующего элемента :)

Соотв. "Как определить столкновение экземпляра с самим собой" в данном случае вообще звучит некорректно.

deep70
30.05.2013, 13:53
Простите, ляпнул не подумав. У змейки же есть "голова" которая и тестирует столкновения.

Tails
30.05.2013, 14:04
Очень просто:
head.hitTest(head);

dark256
30.05.2013, 14:31
Очень просто:

Может таки всё ж:

head.hitTest(body);

Tails
30.05.2013, 14:42
dark256,
Но тогда голова не будет сталкиваться сама с собою!

dark256
04.06.2013, 11:23
А как ты себе представляешь это?
Одна и та же голова ударяется саму об себя....
Как , черт возьми, Холмс????
Можно "схемку, аль чертеж" ? :))))

Коллега..... представьте..... вот вы идете по улице.... и налетаете на самого себя....

С.Лем, "Звездные дневники Ийона Тихого" ? :))))