Пятница, 29 Марта 2024, 00:47

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Головоломочка(Коллизии) (Для тех кому нечем заняться...)
Головоломочка(Коллизии)
XDominatorДата: Понедельник, 27 Мая 2013, 20:07 | Сообщение # 1
постоянный участник
Сейчас нет на сайте
В общем, ситуация примерно такая - в картинках:

Состояние в 1 момент -



Состояние в некий n-ый момент:



суть вопроса - предложить некую систему, которая позволяла бы каким то образом стабильно избегать такой ситуации. Необходимо учитывать, что объект может поворачиваться с шагом <1 градуса/шаг, и точка поворта совсем необязательно стоит в центре(но при этом, точка статична, т.е. алгоритм должен учитывать лишь ее начальное состояние.). Стены могут находиться с любой стороны от объекта(слева, справа, сверху вотэвер), вариант с тем чтобы запрещать поворот при коллизии с какой то стороны не катит.


Ghaarp

The soul lighter(Android, logic)

Zzzzombie RAGE!!!(For android)


Сообщение отредактировал XDominator - Понедельник, 27 Мая 2013, 20:07
YellowAfterlifeДата: Понедельник, 27 Мая 2013, 21:08 | Сообщение # 2
Сейчас нет на сайте
Код
if (place_free(x, y)) { // если объект не находится в стене,
     image_angle += rotation; // поворачиваем объект
     if (!place_free(x, y)) { // если после этого объект застрял в стене,
         image_angle -= rotation; // отменяем поворот
     }
}


XDominatorДата: Вторник, 28 Мая 2013, 09:42 | Сообщение # 3
постоянный участник
Сейчас нет на сайте
Цитата (XDominator)
вариант с тем чтобы запрещать поворот при коллизии с какой то стороны не катит.

Я имел ввиду, что объект не должен быть ограничен в поворотах в принципе. Он должен менять свою позицию в пространстве так, чтобы коллизий при повороте не было(в примере, он должен постепенно сдвигаться вверх...) Хотя конечно, можно попробовать поплясать и от такого варианта... Вот если бы научиться определять координаты точки столкновения... Но я не нашел ничего такого в справке по gml


Ghaarp

The soul lighter(Android, logic)

Zzzzombie RAGE!!!(For android)
Abel399Дата: Среда, 29 Мая 2013, 04:31 | Сообщение # 4
Surpass your limits. Right now.
Сейчас нет на сайте
Ну если постепенно двигаться, то можно как-то так:
Код
if !(place_free(x-1,y))
{
x+=1;
}
  if !(place_free(x+1,y))
{
x-=1;
}
  if !(place_free(x,y-1))
{
y+=1;
}
  if !(place_free(x,y+1))
{
y-=1;
}

Т.е. проверяем все во всех 4 направлениях. И если находим, то двигаемся в противоположную сторону. Подойдет дажн если стена будет диагональноперекареженной и т.п. Спасибо за внимание.


Ninja Slayer - 2D Physics Puzzle [cancelled]
XDominatorДата: Среда, 29 Мая 2013, 09:01 | Сообщение # 5
постоянный участник
Сейчас нет на сайте
if !(place_free(x-1,y))

Расчет в данной функции идет не от х игрока как координаты, а от объекта в целом? Хм...


Ghaarp

The soul lighter(Android, logic)

Zzzzombie RAGE!!!(For android)
Abel399Дата: Среда, 29 Мая 2013, 10:24 | Сообщение # 6
Surpass your limits. Right now.
Сейчас нет на сайте
Если моя память не до конца атрофирована, то да) Ну, а принцип должен быть такой)

Добавлено (29.05.2013, 10:24)
---------------------------------------------
Вот примерчик своял быстренько) Работает вроде хорошо.. правда, есть один баг... (типо если вращаться и в упор двигаться в стенку, то через какое-то время можешь проникнуть в объект стены, но это поправимо). Управление - W,A,S,D и ЛКМ (вращение влево), так же ПКМ (вращение вправо). Спасибо за внимание :3


Ninja Slayer - 2D Physics Puzzle [cancelled]
XDominatorДата: Среда, 29 Мая 2013, 14:05 | Сообщение # 7
постоянный участник
Сейчас нет на сайте
Гляну как с работы приду, если так то буду твой пример нещадно юзать в работах biggrin

Ghaarp

The soul lighter(Android, logic)

Zzzzombie RAGE!!!(For android)
SaladinДата: Четверг, 30 Мая 2013, 11:12 | Сообщение # 8
заслуженный участник
Сейчас нет на сайте
Я не совсем понимаю суть проблемы. Есть обьект со спрайтом, есть точка вращения. Берем наибольшее расстояние от точки вращения до края спрайта и ограничиваем движение к твердому обьекту на это расстояние. Все необходимые переменные у спрайта имеются, рассчитать расстояние легко.


Анбаннэд. Хэлоу эгин =)
XDominatorДата: Пятница, 31 Мая 2013, 17:44 | Сообщение # 9
постоянный участник
Сейчас нет на сайте
слишком топорный способ, у длинных спрайтов будет очень большая зона "неподхождения" к объектам.

Ghaarp

The soul lighter(Android, logic)

Zzzzombie RAGE!!!(For android)
SaladinДата: Пятница, 31 Мая 2013, 17:53 | Сообщение # 10
заслуженный участник
Сейчас нет на сайте
То, что тебе нужно физически невозможно без ограничения вращения. Либо жертвовать этим, либо зоной "неподхождения".

Анбаннэд. Хэлоу эгин =)
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Головоломочка(Коллизии) (Для тех кому нечем заняться...)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг