Удаление группы одинаковых объектов.

  Вход на форум   логин       пароль   Забыли пароль? Регистрация
On-line:  

Раздел: 
Game Maker Форум / Вопросы и Ответы (Для Опытных) / Удаление группы одинаковых объектов.

Страницы: 1  новая тема

Автор Сообщение

гроссмейстер
Группа: Сообщество GM
Сообщений: 287
Добавлено: 25-01-2007 00:33
Допустим есть много разноцветных шариков, и если выстроить в ряд 3 шарика одного цвета или больше, то эта группа шариков удалится(на таком принципе построена игра Lines).
Кто нибудь знает как такое реализовать???

мастер
Группа: Сообщество GM
Сообщений: 78
Добавлено: 25-01-2007 13:05
Ну может это выглядит так - if в соседней клетке с жёлтым шариком(например по вертикали) находится ещё 1-2 таких же then удалить шарики. Ну это теория,а над самим кодом надо подумать...

гроссмейстер
Группа: Сообщество GM
Сообщений: 173
Добавлено: 25-01-2007 14:50
Вот самый быстрый способ, чтобы много не думать:
(h - ширина и высота шарика, ball - объект шарика)
(условие: x и y находятся в верхнем левом углу объекта ball)

//обработка горизонтали
if (instance_position(x+h+1,y,ball))
{
if ((instance_position(x+h*2+1,y,ball))or(instance_position(x-1,y,ball)))
{
instance_destroy();
}
}
if (instance_position(x-1,y,ball))
{
if ((instance_position(x-h-1,y,ball))or(instance_position(x+h+1,y,ball)))
{
instance_destroy();
}
}
//обработка вертикали
if (instance_position(y+h+1,x,ball))
{
if ((instance_position(y+h*2+1,x,ball))or(instance_position(y-1,x,ball)))
{
instance_destroy();
}
}
if (instance_position(y-1,x,ball))
{
if ((instance_position(y-h-1,x,ball))or(instance_position(y+h+1,x,ball)))
{
instance_destroy();
}
}

Итог: сколько бы ни было щариков по вертикали или горизонтали,
но не меньше 3 штук, и даже если пересекаются эти горизонтали
и вертикали, - все равно все корректно должно исчезнуть.

Копируй код в событие шага
и подправь значение h и название объекта ball,
в соответствии с твоей игрой.

гроссмейстер
Группа: Сообщество GM
Сообщений: 287
Добавлено: 26-01-2007 00:20
Это я и сам мог сделать.
Мне нужен другой способ чтоб проверка была только у последнего созданного шарика, а если каждый шарик будет проверять расположение других, то на слабых компах в игру не поиграешь.
Итог: сколько бы ни было щариков по вертикали или горизонтали,
но не меньше 3 штук, и даже если пересекаются эти горизонтали
и вертикали, - все равно все корректно должно исчезнуть.

Если например по вертикали пересекаются 5 шариков, а по горизонтали только 2, то они не удалятся!

гроссмейстер
Группа: Сообщество GM
Сообщений: 189
Добавлено: 26-01-2007 09:15
Мне нужен другой способ чтоб проверка была только у последнего созданного шарика, а если каждый шарик будет проверять расположение других, то на слабых компах в игру не поиграешь.

а как тогда будет происходить проверка у групп образовавшихся после исчезновения другой группы и падения сверху необходимых шариков. Обычно в играх "с шариками" проихожит так.

гроссмейстер
Группа: Сообщество GM
Сообщений: 173
Добавлено: 26-01-2007 19:47

Если например по вертикали пересекаются 5 шариков, а по горизонтали только 2, то они не удалятся!


Внимательнее прочти мое сообщение, которое ты цитировал!
(выделяю то, на которые нужно обратить внимание)
Итог: сколько бы ни было щариков по вертикали или горизонтали,
но не меньше 3 штук, и даже если пересекаются эти горизонтали
и вертикали, - все равно все корректно должно исчезнуть.

Как видишь там и не подразумевается проверка двух шариков при пересекании.

Спросишь почему?

Привожу цитату из твоего поста:

и если выстроить в ряд 3 шарика одного цвета или больше, то эта группа шариков удалится

Тоесть тебя интересовало, только если выстроить в ряд.

А если хочешь сделать по-другому, то просто переделай немного
тот код, который я написал.

Мне нужен другой способ чтоб проверка была только у последнего созданного шарика, а если каждый шарик будет проверять расположение других, то на слабых компах в игру не поиграешь.


Во-первых, Lex - прав. У тебя не получится тогда ничего.

Во-вторых, какие слабые компы ты имеешь в виду?
На 468-ом CPU сейчас наврядли кого-то встретишь

В третьих, каждый шарик не будет выполнять весь код, который я написал.
Для используй дополнительную переменную, с помощью которой сделай так,
чтобы код выполнялся только один раз, после последнего шага игры.
Именно ИГРЫ, а не события шага!
Тоесть ты сдвинул шарик, уничтожились группы шариков,
сверху "попадали" новые шарики, и когда "все успокоится",
должен выполниться код проверки для каждого шарика.
Если это и съест много ресурсов, то только в течении доли секунды.

гроссмейстер
Группа: Сообщество GM
Сообщений: 287
Добавлено: 27-01-2007 00:15
Даже если код использовать в конце каждого хода, то всё равно комп будет временно подвисать. Мне кажется во всех подобных играх используется другой принцып, этот какой то ламерский.
Может можно как нибудь одноцветные шарики расположенные рядом объеденять в группы, и если шариков в группе набирается определенное количество, то эта группа удаляется?

гроссмейстер
Группа: Сообщество GM
Сообщений: 173
Добавлено: 27-01-2007 09:42

этот какой то ламерский.


Я же написал в первом своем сообщении в этой теме:
Вот самый быстрый способ, чтобы много не думать:

Если подумать, то получится и хороший способ.

Может можно как нибудь одноцветные шарики расположенные рядом объеденять в группы, и если шариков в группе набирается определенное количество, то эта группа удаляется?

А это по твоему ресурсов не сожрет?
И чтобы объединить нужно все равно проверить по сколько шариков в линии.

Даже если код использовать в конце каждого хода, то всё равно комп будет временно
подвисать.
Кстати, а ты на практике это попробовал? С каким количеством шариков?

Страницы: 1  новая тема
Раздел: 
Game Maker Форум / Вопросы и Ответы (Для Опытных) / Удаление группы одинаковых объектов.

Отвечать на темы в данном разделе могут только зарегистрированные пользователи

Отвечать на темы могут только зарегистрированные пользователи

KXK.RU