Автотайлинг на ГМ
| |
Saladin | Дата: Пятница, 20 Июля 2012, 21:28 | Сообщение # 1 |
заслуженный участник
Сейчас нет на сайте
| Двое суток (не шучу, почти полных двое суток!) просидел на этим [censored] автотайлом. Как обычно получается в таких случаях - добро победило зло. То бишь я таки сделал что хотел, автотайлинг заработал как положено. Собственно после таких мучений всегда хочется поделиться с кем нибудь плодами своего труда, так что делюсь с вами.
Алгоритм брал отсюда. Скрипты для работы с битовыми значениями взял отсюда (статья собственно тоже неплохая).
Скачать исходник v0.2 (8.0) можно отсюда. Рисовать ЛКМ, перезапуск комнаты - R, двигать карту - стрелки. С комментариями не густо, несколько заметок в самом начале сделал, а потом просто забил, так что чтобы разобраться нужно попотеть
В общем пользуйтесь, вдруг кому пригодится.
Анбаннэд. Хэлоу эгин =)
Сообщение отредактировал Saladin - Воскресенье, 22 Июля 2012, 22:10 |
|
| |
hero564 | Дата: Пятница, 20 Июля 2012, 22:34 | Сообщение # 2 |
Made in Ukraine
Сейчас нет на сайте
| Ух ты , впечетляет)) Сделано красиво держи +
|
|
| |
pr0grammer | Дата: Суббота, 21 Июля 2012, 14:12 | Сообщение # 3 |
Пользователь Game Maker
Сейчас нет на сайте
| Прикольно, плюсую
|
|
| |
Saladin | Дата: Суббота, 21 Июля 2012, 15:45 | Сообщение # 4 |
заслуженный участник
Сейчас нет на сайте
| Спасибо.
Собственно, развивая тему, хотелось бы добавить в автотайл множественные слои с разными типами тайлов. Это довольно сложно сделать сейчас, из-за особенностей алгоритма. Суть такова: есть сетка, количеством ячеек равная размеру комнаты / 32. В эту сетку записывается значение из четырех битов, 0000 к примеру для тайла полностью заполненного водой и 1111 - почвой. Таким образом в сетку можно записать только два типа тайлов, одному соответствует бит 1, другому - 0. К сожалению бит не может принимать другие значения, поэтому хорошая в теории задумка с присваиванием типу тайла порядкового номера, 2222 для травы например, терпит фиаско, ибо значение 2 аннигилирует в ноль.
В общем хотелось бы услышать мнение о том, как же все таки добиться многослойности автотайлинга. Надеюсь на вашу помощь, ребят
Анбаннэд. Хэлоу эгин =)
Сообщение отредактировал Saladin - Суббота, 21 Июля 2012, 15:46 |
|
| |
Qvant | Дата: Суббота, 21 Июля 2012, 15:55 | Сообщение # 5 |
почти ветеран
Сейчас нет на сайте
| Массив из обычных чисел в гамаке не отличается от массива из бинарных
|
|
| |
Saladin | Дата: Суббота, 21 Июля 2012, 16:00 | Сообщение # 6 |
заслуженный участник
Сейчас нет на сайте
| Поясни пожалуйста, как мне оперировать простыми числами так же как битовыми? У меня есть бинарное число на четыре бита. Я могу менять каждый из этих битов, подбирая нужную бинарную комбинацию. Каким образом мне оперировать простыми числами, если например 0000 как простое число в принципе не существует (ну или равняется нулю), число 0011 упрощается до 11 и т.д.
Анбаннэд. Хэлоу эгин =)
Сообщение отредактировал Saladin - Суббота, 21 Июля 2012, 16:01 |
|
| |
GameMix | Дата: Суббота, 21 Июля 2012, 16:06 | Сообщение # 7 |
старожил
Сейчас нет на сайте
| Saladin, используй строки: '0000', а записывай в них по одной цифре через str(0).
Steel Standoff - 2D аркада. Мои статьи
|
|
| |
Saladin | Дата: Суббота, 21 Июля 2012, 16:12 | Сообщение # 8 |
заслуженный участник
Сейчас нет на сайте
| GameMix, если мне нужно изменить третий бит, на единицу (0010), каким образом мне оперировать строкой? Доступные в гм функции дают возможность найти первый встречающийся символ, и заменить его, но таких символов может идти подряд несколько (пред. пример). Или я невнимательно читал справку?
Анбаннэд. Хэлоу эгин =)
|
|
| |
GameMix | Дата: Суббота, 21 Июля 2012, 17:23 | Сообщение # 9 |
старожил
Сейчас нет на сайте
| Quote (Saladin) если мне нужно изменить третий бит, на единицу (0010) Ок, тогда предлагаю так:Code Str = '0000'; Str = string_delete(Str,3,1); Str = string_insert('1',Str,3);
Steel Standoff - 2D аркада. Мои статьи
|
|
| |
LunarPixel | Дата: Суббота, 21 Июля 2012, 18:08 | Сообщение # 10 |
старожил
Сейчас нет на сайте
| Бегло пробежался, ничего не качал, пока инет не позволяет, может не понял суть проблемы, но нельзя ли просто переводить двоичные значения в десятичные и наоборот?! т.е. 0001 = 2, 0010 = 4 и т.д. Берем двоичное значение, переводим в десятичное, смотрим чему равно, если, например 2, значит это трава и т.д.
|
|
| |
Saladin | Дата: Воскресенье, 22 Июля 2012, 22:07 | Сообщение # 11 |
заслуженный участник
Сейчас нет на сайте
| Quote (LunarPixel) двоичные значения в десятичные и наоборот?! Переводить то можно, только толку от этого не много. Каждый бит в значении отвечает за "заполненность" тайла тем или иным типом. В тайле со значением 0010 (если для примера взять 0 - вода, 1 - почва) почвой заполнен только нижний левый угол (по принципу первый бит - верхний левый, второй - верхний правый, третий - нижний левый, четвертый - нижний правый). Переводя числа в десятичную систему я просто не смогу сопоставить подтип тайла одной ячейки с другой или это будет жрать слишком много проверок.
Впрочем вопрос уже почти решен. По совету Qvant пробую использовать четыре сетки, по одной на каджый бит. Если доделаю, обновлю ссылку на новый вариант. Опять же вдруг кому пригодится Добавлено (22.07.2012, 22:07) --------------------------------------------- В затяжных боях с силами тьмы полегло много чашек кофе и еще больше сигарет, но добро в конце концов одержало верх. В результате сражения была добыта версия системы автотайлинга версии 0.2.
В новой версии можно использовать вплоть до 3-х видов тайлов (вода, темная почва, светлая почва). Деревья и камни еще не готовы, но это дело нескольких дней, плюс еще готовятся два подтипа для почвы ("темная" темная и "темная" светлая, пардон за каламбур).
Тайлы при рисовании немного дергаются, но косметику я решил отложить до конечной стадии.
Скачать можно в первом посте.
Анбаннэд. Хэлоу эгин =)
|
|
| |
|