Изменить фрейм спрайта
| |
Made_In_USSR | Дата: Воскресенье, 23 Мая 2010, 21:29 | Сообщение # 1 |
заслуженный участник
Сейчас нет на сайте
| Доброго времени суток и здрасте. У меня возникла проблема, сейчас изложу. Надеюсь на вашу помощь. Думаю все играли в ВарКрафт 2. Ну если не играли, никогда не поздно Конкретный пример реализации стен, как в выше упомянутой игре. Есть стена (один блок). На него назначен спрайт "единичной" стены. Если рядом с блоком поставить еще один, то спрайты обоих изменятся, как бы "сливаясь" в один. Если добавить еще один с другой стороны, то все три "сольются" в один и так далее. Для наглядности вот вам скрин: Суть вопроса, как реализовать это в гамаке. Идей у меня нет даже приблизительно, так что мне не то что готовый солюшен, даже просто толчек в правильном направлении будет уже хорошо. Но желательно конечно чуток разжевать
Новичкам изучающим GML кликать сюда. Много примеров, исходников, библиотек и вообще всего что вам только может пригодиться. Автор портала, прости меня за ссылку, наболело =)
|
|
| |
Qvant | Дата: Воскресенье, 23 Мая 2010, 21:48 | Сообщение # 2 |
почти ветеран
Сейчас нет на сайте
| Вот алгоритм : разбей стены на куски , например 32х32 , левый край , середина , правый край и одиночная стена . при добавлении стены на карте помещай их координатах округлить(вид / 32 ) и делай проверку на столкновения со всеми стенами если стена без столкновений , то она одиночная если одиночная стена с одиночной , то стены меняются - слева будит левый край , справа правый край если одиночная стена с левым краем - то одиночная станет левым краем а левый край серединой У меня валялся пример похожей реализации , там вместо стен дорога была , но я этот пример сейчас в мусоре не откапаю
|
|
| |
Made_In_USSR | Дата: Воскресенье, 23 Мая 2010, 22:06 | Сообщение # 3 |
заслуженный участник
Сейчас нет на сайте
| Ну это уже кое-что Пробовал я таким методом. Фокус-то в чем: тайл стены 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 пикселя. Или это ты абстрактно вписал туда единицу, а смещение в пикселях по месту считать? И как ты запихнул айди в переменную? Точнее из чего айди образовался там? Разжуй пожалуйста
Новичкам изучающим 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 |
заслуженный участник
Сейчас нет на сайте
| Хе-хе, ты не поверишь Сижу с вечера, и до утра без сна и отдыха. Ну нихрена не хочет алгоритм таким макаром работать. Переменная вроде должна возвращать разные значения если есть столкновение и если нет. На практике у меня все инстансы приобретают такой вид, будто есть столкновение со стеной, хотя его нифига нет. Ужжассс! Ну да ладно, еще повожусь, потом загляну с результатом, а пока еще такой вопрос: if (!collision_point(wall.x+1,wall.y,wall,true,true)) { //Код } будет ли такой код валидным? читать как "если нет столкновения в точке ... обьекта ..." з.ы.: для всех читающих, было бы неплохо, если бы кто нибудь, кто слышал об этом самом туториале о дорогах (сообщение №2) кинул бы на него ссылку (еси есь конечно).
Новичкам изучающим GML кликать сюда. Много примеров, исходников, библиотек и вообще всего что вам только может пригодиться. Автор портала, прости меня за ссылку, наболело =)
|
|
| | |
Made_In_USSR | Дата: Среда, 26 Мая 2010, 19:45 | Сообщение # 9 |
заслуженный участник
Сейчас нет на сайте
| Отличный пример! Просто огромное спасибо! Эм, только один вопрос. alarm0 носит чисто декоративный характер?
Новичкам изучающим GML кликать сюда. Много примеров, исходников, библиотек и вообще всего что вам только может пригодиться. Автор портала, прости меня за ссылку, наболело =)
Сообщение отредактировал Made_In_USSR - Среда, 26 Мая 2010, 19:47 |
|
| |
|