Воскресенье, 17 Ноября 2024, 13:43

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Изменить фрейм спрайта
Made_In_USSRДата: Воскресенье, 23 Мая 2010, 21:29 | Сообщение # 1
заслуженный участник
Сейчас нет на сайте
Доброго времени суток и здрасте.

У меня возникла проблема, сейчас изложу. Надеюсь на вашу помощь.

Думаю все играли в ВарКрафт 2. Ну если не играли, никогда не поздно smile
Конкретный пример реализации стен, как в выше упомянутой игре. Есть стена (один блок). На него назначен спрайт "единичной" стены. Если рядом с блоком поставить еще один, то спрайты обоих изменятся, как бы "сливаясь" в один. Если добавить еще один с другой стороны, то все три "сольются" в один и так далее.
Для наглядности вот вам скрин:

Суть вопроса, как реализовать это в гамаке. Идей у меня нет даже приблизительно, так что мне не то что готовый солюшен, даже просто толчек в правильном направлении будет уже хорошо. Но желательно конечно чуток разжевать biggrin

Прикрепления: 5039901.jpg (50.5 Kb)


Новичкам изучающим GML кликать сюда.
Много примеров, исходников, библиотек и вообще всего что вам только может пригодиться. Автор портала, прости меня за ссылку, наболело =)
QvantДата: Воскресенье, 23 Мая 2010, 21:48 | Сообщение # 2
почти ветеран
Сейчас нет на сайте
Вот алгоритм :
разбей стены на куски , например 32х32 , левый край , середина , правый край и одиночная стена .
при добавлении стены на карте помещай их координатах округлить(вид / 32 ) и делай проверку на столкновения со всеми стенами
если стена без столкновений , то она одиночная
если одиночная стена с одиночной , то стены меняются - слева будит левый край , справа правый край
если одиночная стена с левым краем - то одиночная станет левым краем а левый край серединой

У меня валялся пример похожей реализации , там вместо стен дорога была , но я этот пример сейчас в мусоре не откапаю biggrin

Made_In_USSRДата: Воскресенье, 23 Мая 2010, 22:06 | Сообщение # 3
заслуженный участник
Сейчас нет на сайте
Ну это уже кое-что smile

Пробовал я таким методом. Фокус-то в чем: тайл стены 32*32 на сетке с размером ячейки 32*32. Как разбить такую вакханалию на части?

Quote

// image_index=0
// image_speed=0
//if (collision_point(wall.x+2,wall.y-2,wall,true,true))
//then {
// image_index=4
// image_speed=0
// }

//if (collision_point(wall.x+2,wall.y+35,wall,true,true))
//then {
// image_index=1
// image_speed=0
// }


вот что я пытался впарить гамаку, и естественно он меня послал. если тебе этот код говорит больше чем мен поделись соображениями. Где я дал маху?


Новичкам изучающим GML кликать сюда.
Много примеров, исходников, библиотек и вообще всего что вам только может пригодиться. Автор портала, прости меня за ссылку, наболело =)
QvantДата: Воскресенье, 23 Мая 2010, 22:34 | Сообщение # 4
почти ветеран
Сейчас нет на сайте
temp = collision_point(wall.x+1,wall.y,wall,true,true)
if (temp != -1)
{
//Код
}

в переменной temp будит ID второй стены , в данном случае справа

Made_In_USSRДата: Воскресенье, 23 Мая 2010, 22:48 | Сообщение # 5
заслуженный участник
Сейчас нет на сайте
Маленький вопрос:
(х+1,у) считает точку столкновения внутри обьекта. Это я к тому, что координаты считаются из верхнего левого угла, а размер обьекта-то 32 пикселя.
Или это ты абстрактно вписал туда единицу, а смещение в пикселях по месту считать?

И как ты запихнул айди в переменную? Точнее из чего айди образовался там?

Разжуй пожалуйста smile


Новичкам изучающим GML кликать сюда.
Много примеров, исходников, библиотек и вообще всего что вам только может пригодиться. Автор портала, прости меня за ссылку, наболело =)
QvantДата: Воскресенье, 23 Мая 2010, 23:07 | Сообщение # 6
почти ветеран
Сейчас нет на сайте
Читаем справку :
Проверка cтолкновения
...Все эти функции возвращают идентификатор одного из образцов объекта, который сталкивается, или они возвращают отрицательное значение, когда нет столкновения.
collision_point(x,y,obj,prec,notme) Проверяет, есть ли в точке (x,y) столкновение с объектами obj.

Алгоритм написаный выше проверяет только горизонтальные блоки стен , поэтому если сместить на 1 пиксель вправо столкновение максимум может с 1 объектом ...
блоки одиноковые , поэтому неважно откуда идут координаты , установка стен можно и со смещением округлить(вид / 32 )+16 алгоритм от этого не изменится

Made_In_USSRДата: Понедельник, 24 Мая 2010, 08:55 | Сообщение # 7
заслуженный участник
Сейчас нет на сайте
Хе-хе, ты не поверишь biggrin
Сижу с вечера, и до утра без сна и отдыха. Ну нихрена не хочет алгоритм таким макаром работать.

Переменная вроде должна возвращать разные значения если есть столкновение и если нет. На практике у меня все инстансы приобретают такой вид, будто есть столкновение со стеной, хотя его нифига нет. Ужжассс!

Ну да ладно, еще повожусь, потом загляну с результатом, а пока еще такой вопрос:
if (!collision_point(wall.x+1,wall.y,wall,true,true))
{
//Код
}

будет ли такой код валидным? читать как "если нет столкновения в точке ... обьекта ..."

з.ы.: для всех читающих, было бы неплохо, если бы кто нибудь, кто слышал об этом самом туториале о дорогах (сообщение №2) кинул бы на него ссылку (еси есь конечно).


Новичкам изучающим GML кликать сюда.
Много примеров, исходников, библиотек и вообще всего что вам только может пригодиться. Автор портала, прости меня за ссылку, наболело =)
NeZnayuДата: Понедельник, 24 Мая 2010, 20:57 | Сообщение # 8
__танцуй!__
Сейчас нет на сайте
Сделал пример - ссылка wink

CombatForce - 2d TDS долгожданный релиз
Noobster - самый простой конструктор игр в мире
LaLaLaLAMA! - игра не про Ламу
Made_In_USSRДата: Среда, 26 Мая 2010, 19:45 | Сообщение # 9
заслуженный участник
Сейчас нет на сайте
Отличный пример! Просто огромное спасибо! hands

Эм, только один вопрос. alarm0 носит чисто декоративный характер?


Новичкам изучающим GML кликать сюда.
Много примеров, исходников, библиотек и вообще всего что вам только может пригодиться. Автор портала, прости меня за ссылку, наболело =)


Сообщение отредактировал Made_In_USSR - Среда, 26 Мая 2010, 19:47
  • Страница 1 из 1
  • 1
Поиск:

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