Насколько я помню, в Worms они использовали два изображения; «Симпатичная» местность с цветом и маска местности чисто черного и белого цвета. Обнаружение попадания всегда выполняется по маске.
Если вы действительно хотите, чтобы ландшафт рухнул, как это было в Tank Wars, вам нужно будет выполнить итерацию по каждому столбцу вашего изображения и найти в нем промежутки между ландшафтом и нижней частью игрового поля. Если обнаружены какие-либо пропуски, сдвиньте местность над пропуском вниз до самой низкой точки в вашем столбце.
Простой пример этого может быть сделан с массивом, где 1 представляет сплошную местность, а 0 представляет пустое пространство. В этом случае я установил левую сторону массива как уровень земли, чтобы элемент [0]
был на земле:
[1,1,1,1,1,1,0,0,0,0]
Предположим, что местность поражена сбоку и сделано отверстие:
[1,1,0,0,1,1,0,0,0,0]
Теперь у вас остался плавающий участок местности над другим участком. Чтобы сделать плавающий ландшафт коллапсом, переберите массив, следя за первой позицией, в которой вы найдете 0 (пустое место). Затем, продолжая итерацию, обнаружив 1 (местность), просто сдвиньте 1 туда, где был 0. Повторите процесс, повторяя эту прежнюю позицию 0 + 1.
[1,1,1,0,0,1,0,0,0,0]
[1,1,1,1,0,0,0,0,0,0]
Это основной подход, а не самый эффективный. Например, было бы намного быстрее переместить все индексы местности выше разрыва вниз.
EDIT:
Как говорится в первом комментарии, сортировка в списке еще проще. Я оставляю свой первоначальный ответ без изменений, поскольку он помогает объяснить действительный принцип, лежащий в основе разрушающегося ландшафта.