Суббота, 23 Ноября 2024, 21:36

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Как сделать частичное уничтожение блока?
tifasoДата: Воскресенье, 19 Июня 2011, 13:22 | Сообщение # 1
постоянный участник
Сейчас нет на сайте
Нужно сделать так чтобы при столновении пули с блоком блок не сразу уничтожался, а как бы по кусочкам. Также надо проследить чтобы определялось с какой стороны попадает пуля с той стороны и убирать часть блока. Если кто ещё не понял обьесню на примере в танчиках есть такое (столкновение пули с кирпичом) он откалывается по кусочкам. Задача очень не простая потому прошу помощи cry . Мой котелок не варит (образно).

Ну примерно могу только сказать что нужно как то с переменными проверять пули при столкновении с блоками.



Мой сайт: http://tifaso.narod.ru/
Мои проекты: Cерия игр Hyougo;
Медвежонок Кит;
Argo Player; Text Manager
LunarPixelДата: Воскресенье, 19 Июня 2011, 13:25 | Сообщение # 2
старожил
Сейчас нет на сайте
tifaso, как самый простой, но далеко не самый хороший вариант - сделать каждый блок из более маленьких, и при столкновении пули с этим маленьким блоком он удаляется и удаляется пуля. Будет так же как в танчиках. smile

Ну если локация будет не очень большая, то этот вариант вполне подойдет. smile




Сообщение отредактировал 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, насколько я понял, а танчики приведены просто в пример smile

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
участник
Сейчас нет на сайте
Одна из самых простейших вещей - это частичное разрушение, если не вычислять с какой стороны было повреждение...
просто делаешь несколько спрайтов от полностью здорового до полностью разрушенного и когда уменьшается хп подставляешь нужную картинку... wink


В попытках осуществить Ньютоновскую физику на 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 (Кили)
Способность перефразировать чужие ответы - дорогого стоит.

Не понял. wink

Добавлено (19.06.2011, 14:10)
---------------------------------------------
Почитал выше - понял.
Извини не читал комменты, а просто ответил на вопрос. wink


В попытках осуществить Ньютоновскую физику на 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
Сейчас нет на сайте
Можно всё кодом smile
Например создаёте 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.
Эффективно и меньше парева smile

Добавлено (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
Томатный революционер
Сейчас нет на сайте
Пример разрушаемой земли
  • Страница 1 из 1
  • 1
Поиск:

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