Разрушаемый ландшафт с помощью Tilemap |
Сообщений: 14
• 1, 2
Здравствуйте!
Сейчас я покажу вам мою идею разрушаемого ландшафта с использованием TileMap. Кто не знает что это, раскройте вкладку снизу.
1.Теория.
Существует объект, который будет служить "разрушителем" тайл'ов. Он может быть как и пулей, как и платформером или TDS-объектом, неважно. Но в этом примере будет пуля, и так я её и буду называть.
При столкновении с тайлмап'ом, из координат пули будет вычитываться расстояние между началом лайаута и левого верхнего угла тайлмап'а. Таким образом, новые координаты пули (которые записаны в переменной и саму пулю никак не изменяют) запишутся так, будто бы координаты верхнего угла тайлмап'а - начало лайаута. Через небольшую операцию будет высчитываться индекс нужного тайл'а и будет происходить его удаление.
2.Программа.
Заготовка будущего проэкта:
Итак, приступим.
Ширину тайл'а вы можете сделать любую, хоть 1х1. Для начала нужно добавить объект без текстуры с размерами, равными размеру тайл'а и закрепить (PIN) к верхнему тайл'у тайлмап'а (Я назову его tilemappoint) и добавить две локальные переменные к пуле. Назовите их хоть как, главное, чтобы в названии фигурировали X и Y. Я назову их "PsevdoX" и "PsevdoY".
Дальше добавим собыие:
Bullet - On collision with Tilemap | Set "PsevdoX" to "(floor((Bullet.X-tilemappoint.X)/32))"
Когда пуля касается тайлмап'а, В первую переменную записывается X-координата пули, из которой вычли X-координату Объекта- имэйджпоинта (то-есть, фактически, координату тайлмап'а), округлили вниз (floor) и поделили на длину тайл'а.
Тем самым мы из псевдокоординаты X получали индекс нужного тайла по оси X.
Проделайте в том же событии тоже самое с координатой Y в переменную "PsevdoY", но в формулу вычисления вместо "floor" запишите "round", который округляет дробь вверх. Это надо затем, что origin imagepoint у пули находится в противоположной стороне от тайлмап'а, и когда пуля касается его, oridgin im.p. не успевает "вонзиться" в тайл, из-за чего убирается клетка сверху (Которой не существует).
Далее в том же событии пропишите еще несколько эвентов: |Tilemap - Erase tile (Bullet.PsevdoX (+1,-1), Bullet.PsevdoY (+1,-1) ) . Это сотрет нужный тайл и еще сколько вам надо вокруг, не меньше 1 справа и слева. Делается это для того, чтобы при попадании пули в бок тайл'а,
он тоже уничтожался. Попробуйте попасть в бок с пулей, стирающей один тайл, и пуля не нанесет никакой вред тайл'у.
Ну и добавьте |bullet-destroy в конце события.
Чтобы было более красиво, поставьте размер тайл'а на маленький (с 5x5 и выше), и не забудьте отредактировать код. А также пуля ВСЕГДА должна быть на как минимум один пиксель меньше тайл'а.
Все готово. Оставляйте свое мнение, говорите пожелания и улучшения системы под темой. Я все запишу :)
Исходник проекта:
(Зажмите пробел чтобы стрелять как из пулемета)
(Нажмите Enter чтобы перезапустить)
(А также в этом исходнике размер тайл'а равен 5)
Не судите строго, это моя первая тема :3
Сейчас я покажу вам мою идею разрушаемого ландшафта с использованием TileMap. Кто не знает что это, раскройте вкладку снизу.
1.Теория.
Существует объект, который будет служить "разрушителем" тайл'ов. Он может быть как и пулей, как и платформером или TDS-объектом, неважно. Но в этом примере будет пуля, и так я её и буду называть.
При столкновении с тайлмап'ом, из координат пули будет вычитываться расстояние между началом лайаута и левого верхнего угла тайлмап'а. Таким образом, новые координаты пули (которые записаны в переменной и саму пулю никак не изменяют) запишутся так, будто бы координаты верхнего угла тайлмап'а - начало лайаута. Через небольшую операцию будет высчитываться индекс нужного тайл'а и будет происходить его удаление.
2.Программа.
Заготовка будущего проэкта:
Итак, приступим.
Ширину тайл'а вы можете сделать любую, хоть 1х1. Для начала нужно добавить объект без текстуры с размерами, равными размеру тайл'а и закрепить (PIN) к верхнему тайл'у тайлмап'а (Я назову его tilemappoint) и добавить две локальные переменные к пуле. Назовите их хоть как, главное, чтобы в названии фигурировали X и Y. Я назову их "PsevdoX" и "PsevdoY".
Дальше добавим собыие:
Bullet - On collision with Tilemap | Set "PsevdoX" to "(floor((Bullet.X-tilemappoint.X)/32))"
Когда пуля касается тайлмап'а, В первую переменную записывается X-координата пули, из которой вычли X-координату Объекта- имэйджпоинта (то-есть, фактически, координату тайлмап'а), округлили вниз (floor) и поделили на длину тайл'а.
Тем самым мы из псевдокоординаты X получали индекс нужного тайла по оси X.
Проделайте в том же событии тоже самое с координатой Y в переменную "PsevdoY", но в формулу вычисления вместо "floor" запишите "round", который округляет дробь вверх. Это надо затем, что origin imagepoint у пули находится в противоположной стороне от тайлмап'а, и когда пуля касается его, oridgin im.p. не успевает "вонзиться" в тайл, из-за чего убирается клетка сверху (Которой не существует).
Далее в том же событии пропишите еще несколько эвентов: |Tilemap - Erase tile (Bullet.PsevdoX (+1,-1), Bullet.PsevdoY (+1,-1) ) . Это сотрет нужный тайл и еще сколько вам надо вокруг, не меньше 1 справа и слева. Делается это для того, чтобы при попадании пули в бок тайл'а,
он тоже уничтожался. Попробуйте попасть в бок с пулей, стирающей один тайл, и пуля не нанесет никакой вред тайл'у.
Ну и добавьте |bullet-destroy в конце события.
Чтобы было более красиво, поставьте размер тайл'а на маленький (с 5x5 и выше), и не забудьте отредактировать код. А также пуля ВСЕГДА должна быть на как минимум один пиксель меньше тайл'а.
Все готово. Оставляйте свое мнение, говорите пожелания и улучшения системы под темой. Я все запишу :)
Исходник проекта:
(Зажмите пробел чтобы стрелять как из пулемета)
(Нажмите Enter чтобы перезапустить)
(А также в этом исходнике размер тайл'а равен 5)
Не судите строго, это моя первая тема :3
Последний раз редактировалось Romatoid 19 фев 2015, 13:03, всего редактировалось 2 раз(а).
endermAH, Хорошо, в следующий раз учту
Romatoid писал(а):в следующий раз учту
почему в следующий раз? у тебя нет получившегося исходника от этого урока? я считаю, что без исходника урок не закончен. хочется увидеть результат, а иначе где гарантия, что урок представляет ценность и действительно может чему то научить?

Уроки: Платформер от А до Я
Уроки: TDS от А до Я
Уроки: Создание игры для Андроид от А до Я
Уроки: Раннер от А до Я
Уроки: TDS от А до Я
Уроки: Создание игры для Андроид от А до Я
Уроки: Раннер от А до Я
Отредактировал. Теперь нормально? :)
nagval333 писал(а):Мне очень понравилось, ибо в TileMap-ах слаб я
Спасибо :) Буду стараться делать еще что-нибудь интересное.
Romatoid писал(а):Отредактировал. Теперь нормально? :)
да. теперь норм!

Уроки: Платформер от А до Я
Уроки: TDS от А до Я
Уроки: Создание игры для Андроид от А до Я
Уроки: Раннер от А до Я
Уроки: TDS от А до Я
Уроки: Создание игры для Андроид от А до Я
Уроки: Раннер от А до Я
Romatoid писал(а):nagval333 писал(а):Мне очень понравилось, ибо в TileMap-ах слаб я
Спасибо :) Буду стараться делать еще что-нибудь интересное.
один совет тот невидимый спрайт изрисуй цветами, главное сделай в опциях невидимым. А так продолжай в том же духе

Построй мне мегалит, да побольше!
-
- Сообщений: 522
- Я тут с 08 июл 2015
- Откуда: Из цикла
- Двиг: construct 2
- Лицензия: personal
- Репутация 6 [ ? ]
Зачем мы живём? Пытаешься заработать на жизнь, верно? Вкалываешь, зарабатываешь... Я тебя обломаю - однажды кое-кто заберёт у тебя ВСЁ. Не только материальные вещи, а вообще ВСЁ. Деньги, карьеру, семью, друзей. Однажды у тебя не будет НИЧЕГО что тебя сейчас окружает. Но что-же это за падлюка? Кто однажды заберёт у тебя всё? Ну, не у тебя всё заберут, а ТЕБЯ заберут из этого мира... Это - смерть. Она придёт к каждому. А ты живёшь так, будто ты бессмертен. Я, как и многие другие, слишком привязан к этому не вечному, материальному миру. А ведь мы с тобой когда-нибудь умрем. Мы с тобой лишимся всего, что нажили за всю жизнь. Так зачем тратить попусту время на все эти глупости? А как ты думаешь, кому будет легче в ином мире - тому, кто всю жизнь был привязан к этому миру, гонялся за всеми этими глупыми ценностями; или тот, кто по-настоящему свободен, тот, кто обходится без всего, что нас окружает? Каждый человек либо принадлежит этому миру, либо по-настоящему свободен.
Сообщений: 14
• Страница 1 из 2 • 1, 2
Вернуться в Другие уроки по Construct 2
Сейчас эту тему просматривают
Зарегистрированные пользователи: нет зарегистрированных пользователей