Как сделать частичное уничтожение блока?
|
|
tifaso | Дата: Воскресенье, 19 Июня 2011, 13:22 | Сообщение # 1 |
постоянный участник
Сейчас нет на сайте
| Нужно сделать так чтобы при столновении пули с блоком блок не сразу уничтожался, а как бы по кусочкам. Также надо проследить чтобы определялось с какой стороны попадает пуля с той стороны и убирать часть блока. Если кто ещё не понял обьесню на примере в танчиках есть такое (столкновение пули с кирпичом) он откалывается по кусочкам. Задача очень не простая потому прошу помощи . Мой котелок не варит (образно).
Ну примерно могу только сказать что нужно как то с переменными проверять пули при столкновении с блоками.
Мой сайт: http://tifaso.narod.ru/ Мои проекты: Cерия игр Hyougo; Медвежонок Кит; Argo Player; Text Manager
|
|
| |
LunarPixel | Дата: Воскресенье, 19 Июня 2011, 13:25 | Сообщение # 2 |
старожил
Сейчас нет на сайте
| tifaso, как самый простой, но далеко не самый хороший вариант - сделать каждый блок из более маленьких, и при столкновении пули с этим маленьким блоком он удаляется и удаляется пуля. Будет так же как в танчиках.
Ну если локация будет не очень большая, то этот вариант вполне подойдет.
Сообщение отредактировал LunarPixel - Воскресенье, 19 Июня 2011, 13:26 |
|
| |
Кили | Дата: Воскресенье, 19 Июня 2011, 13:39 | Сообщение # 3 |
был не раз
Сейчас нет на сайте
| В танчиках всё гораздо проще. Там нету зависимости от того, с какой стороны летела пуля, и, как следствие, не важно, с какой стороны отколется кирпич. Вот пример, как в танчиках (пример с разбиванием блока на множество более маленьких блоков смотри выше):
1. Задаем блоку количество жизней, допустим, life=5 2. Рисуем 5 кадров, от целого блока, до почти разрушенного 3. Прописываем, что если image_index=life, причем, чем больше жизней, тем прочнее блок, как следствие, целый блок должен быть последним кадром (хотя можно написать image_index=(5-life) или что-то вроде) 4. if life=0 then instance_destroy() - прописываем в Step 5. В столкновении блока с пулей пишем, что life-=1, то есть минус одна жизнь, и, как следствие, сменяется кадр.
|
|
| |
tifaso | Дата: Воскресенье, 19 Июня 2011, 13:43 | Сообщение # 4 |
постоянный участник
Сейчас нет на сайте
| Да я так попробовал сделать (делил блок на четыре части), но в этом случае пуля уничтожает только одну четвертинку блока. Блок квадратный и разделён на четыре равные квадратные части (сделано для того чтобы при попадании пули с разных сторон всегда убиралось половина блока именно с той стороны. А интересно возможно ли удалить сразу две части блока с одного выстрела (одной пулей). Буду благодарен каком нибудь примеру на эту тему или хотя бы коду.
Мой сайт: http://tifaso.narod.ru/ Мои проекты: Cерия игр Hyougo; Медвежонок Кит; Argo Player; Text Manager
|
|
| |
LunarPixel | Дата: Воскресенье, 19 Июня 2011, 13:43 | Сообщение # 5 |
старожил
Сейчас нет на сайте
| Кили, почему это там нет зависимости от стороны с которой летит пуля?! Насколько я помню, если стреляешь снизу, то удаляется нижняя часть, если сверху - то верхняя и т.д. Во всяком случае именно это нужно tifaso, насколько я понял, а танчики приведены просто в пример
|
|
| |
tifaso | Дата: Воскресенье, 19 Июня 2011, 13:45 | Сообщение # 6 |
постоянный участник
Сейчас нет на сайте
| Quote Насколько я помню, если стреляешь снизу, то удаляется нижняя часть, если сверху - то верхняя и т.д. Во всяком случае именно это нужно совершенно верно танчики я привёл в пример.
Мой сайт: http://tifaso.narod.ru/ Мои проекты: Cерия игр Hyougo; Медвежонок Кит; Argo Player; Text Manager
Сообщение отредактировал tifaso - Воскресенье, 19 Июня 2011, 13:47 |
|
| |
Brain | Дата: Воскресенье, 19 Июня 2011, 13:45 | Сообщение # 7 |
участник
Сейчас нет на сайте
| Одна из самых простейших вещей - это частичное разрушение, если не вычислять с какой стороны было повреждение... просто делаешь несколько спрайтов от полностью здорового до полностью разрушенного и когда уменьшается хп подставляешь нужную картинку...
В попытках осуществить Ньютоновскую физику на GameMaker...
|
|
| |
Кили | Дата: Воскресенье, 19 Июня 2011, 13:47 | Сообщение # 8 |
был не раз
Сейчас нет на сайте
| Да, только что посмотрел, там блок разделен на 16 секций. Но это тоже не сложно реализовать, блоки там достаточно большие, а зона коллизий пули - это прямоугольник шириной в 4 блока.Добавлено (19.06.2011, 13:47) ---------------------------------------------
Quote (Brain) Одна из самых простейших вещей - это частичное разрушение, если не вычислять с какой стороны было повреждение... просто делаешь несколько спрайтов от полностью здорового до полностью разрушенного и когда уменьшается хп подставляешь нужную картинку...
Способность перефразировать чужие ответы - дорогого стоит.
|
|
| |
tifaso | Дата: Воскресенье, 19 Июня 2011, 13:56 | Сообщение # 9 |
постоянный участник
Сейчас нет на сайте
| Quote Да, только что посмотрел, там блок разделен на 16 секций. Но это тоже не сложно реализовать, блоки там достаточно большие, а зона коллизий пули - это прямоугольник шириной в 4 блока. Вот это мне и нужно и желательно в примерах и ещё проверка сторон попадания нужно сделать обязательно, но с этим я уже помастерю сам.
Мой сайт: http://tifaso.narod.ru/ Мои проекты: Cерия игр Hyougo; Медвежонок Кит; Argo Player; Text Manager
Сообщение отредактировал tifaso - Воскресенье, 19 Июня 2011, 13:56 |
|
| |
LunarPixel | Дата: Воскресенье, 19 Июня 2011, 14:07 | Сообщение # 10 |
старожил
Сейчас нет на сайте
| tifaso, Вот так сделай и всё:
|
|
| |
Кили | Дата: Воскресенье, 19 Июня 2011, 14:08 | Сообщение # 11 |
был не раз
Сейчас нет на сайте
| А это мой вариант : ) Alarm=2 добавлен, чтобы после столкновения пуля пролетела буквально ещё немного, чтобы задеть соседние блоки. Привязка типа пули (вверх+вниз или влево+вправо, от этого зависит спрайт и зона столкновений) - к направлению самого танка. Эти второстепенные параметры можно менять, как захочется.
Сообщение отредактировал Кили - Воскресенье, 19 Июня 2011, 14:11 |
|
| |
Brain | Дата: Воскресенье, 19 Июня 2011, 14:10 | Сообщение # 12 |
участник
Сейчас нет на сайте
| Quote (Кили) Способность перефразировать чужие ответы - дорогого стоит. Не понял. Добавлено (19.06.2011, 14:10) --------------------------------------------- Почитал выше - понял. Извини не читал комменты, а просто ответил на вопрос.
В попытках осуществить Ньютоновскую физику на GameMaker...
|
|
| |
NeZnayu | Дата: Воскресенье, 19 Июня 2011, 14:10 | Сообщение # 13 |
__танцуй!__
Сейчас нет на сайте
| Самый оптимальный вариант - использовать сурфейсы. Т.е. при столкновении пули с блоком:
1) Создаем новый сурфейс из спрайта блока 2) На нем рисуем зону повреждения 3) Создаем из полученного сурфа новый спрайт и применяем его к блоку
CombatForce - 2d TDS долгожданный релиз Noobster - самый простой конструктор игр в мире LaLaLaLAMA! - игра не про Ламу
Сообщение отредактировал NeZnayu - Воскресенье, 19 Июня 2011, 14:14 |
|
| |
tifaso | Дата: Воскресенье, 19 Июня 2011, 15:04 | Сообщение # 14 |
постоянный участник
Сейчас нет на сайте
| Пример от Кили именно то что я и хотел сделать. Всем спасибо буду делать дальше.
Мой сайт: http://tifaso.narod.ru/ Мои проекты: Cерия игр Hyougo; Медвежонок Кит; Argo Player; Text Manager
|
|
| |
FadeBaker | Дата: Понедельник, 20 Июня 2011, 01:13 | Сообщение # 15 |
JavaSE Game Developer
Сейчас нет на сайте
| Можно всё кодом Например создаёте 2 объекта: o_Mblock - главный блок o_Pblock - создаваемый блок
Рисуйте спрайт 10х10 пх, назначайте его только что созданным объектам.
Объекту o_Mblock пишем код в Create: Code sw = sprite_get_width(sprite_index) sh = sprite_get_height(sprite_index) for(i = 1; i < 10; i += 1) h[i] = instance_create(x, y, o_Pblock) h[1].x = x+sw h[2].x = x-sw h[3].y = y+sh h[4].y = y-sh h[5].x = x+sw; h[5].y = y+sh h[6].x = x-sw; h[6].y = y-sh h[7].x = x+sw; h[7].y = y-sh h[8].x = x-sw; h[8].y = y+sh
Этот код размещает 9 созданных объектов вокруг главного объекта o_Mblock. Эффективно и меньше парева Добавлено (20.06.2011, 01:13) --------------------------------------------- Или же это можно сделать более простым способом: Code sw = sprite_get_width(sprite_index) sh = sprite_get_height(sprite_index) for(i = 0; i < sw*3; i += sw) for(j = 0; j < sh*3; j += sw) instance_create(x+i, y+j, o_Pblock)
Уроки по GM Minecraft 2D на GM — Мои проекты — Blood Harvest [2D] — Original Blood Harvest [2D]: Remastered Edition Adventure Craft [2D] — Sandbox Space Shock [2D] — Scroll Shooter Intel® Core™ i5-3570K 3.40 GHz, 8 GB RAM, GeForce GTX 750 Ti, Monitor: LG 23EA63V-P.
|
|
| |
Фил | Дата: Понедельник, 20 Июня 2011, 10:19 | Сообщение # 16 |
Томатный революционер
Сейчас нет на сайте
| Пример разрушаемой земли
|
|
| |