|
[ На главную ] -- [ Список участников ] -- [ Правила форума ] -- [ Зарегистрироваться ] |
On-line: |
Game Maker Форум / Вопросы и Ответы (Для Опытных) / Удаление группы одинаковых объектов. |
Страницы: 1 |
Автор | Сообщение | ||
punker гроссмейстер Группа: Сообщество GM Сообщений: 287 |
Добавлено: 25-01-2007 00:33 | ||
Допустим есть много разноцветных шариков, и если выстроить в ряд 3 шарика одного цвета или больше, то эта группа шариков удалится(на таком принципе построена игра Lines). Кто нибудь знает как такое реализовать??? |
|||
NEED for KILL мастер Группа: Сообщество GM Сообщений: 78 |
Добавлено: 25-01-2007 13:05 | ||
Ну может это выглядит так - if в соседней клетке с жёлтым шариком(например по вертикали) находится ещё 1-2 таких же then удалить шарики. Ну это теория,а над самим кодом надо подумать... | |||
DaMaGeR-69 гроссмейстер Группа: Сообщество 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, в соответствии с твоей игрой. |
|||
punker гроссмейстер Группа: Сообщество GM Сообщений: 287 |
Добавлено: 26-01-2007 00:20 | ||
Это я и сам мог сделать. Мне нужен другой способ чтоб проверка была только у последнего созданного шарика, а если каждый шарик будет проверять расположение других, то на слабых компах в игру не поиграешь.
Если например по вертикали пересекаются 5 шариков, а по горизонтали только 2, то они не удалятся! |
|||
Lex гроссмейстер Группа: Сообщество GM Сообщений: 189 |
Добавлено: 26-01-2007 09:15 | ||
а как тогда будет происходить проверка у групп образовавшихся после исчезновения другой группы и падения сверху необходимых шариков. Обычно в играх "с шариками" проихожит так. |
|||
DaMaGeR-69 гроссмейстер Группа: Сообщество GM Сообщений: 173 |
Добавлено: 26-01-2007 19:47 | ||
Внимательнее прочти мое сообщение, которое ты цитировал! (выделяю то, на которые нужно обратить внимание) Итог: сколько бы ни было щариков по вертикали или горизонтали, но не меньше 3 штук, и даже если пересекаются эти горизонтали и вертикали, - все равно все корректно должно исчезнуть. Как видишь там и не подразумевается проверка двух шариков при пересекании. Спросишь почему? Привожу цитату из твоего поста: и если выстроить в ряд 3 шарика одного цвета или больше, то эта группа шариков удалится Тоесть тебя интересовало, только если выстроить в ряд. А если хочешь сделать по-другому, то просто переделай немного тот код, который я написал.
Во-первых, Lex - прав. У тебя не получится тогда ничего. Во-вторых, какие слабые компы ты имеешь в виду? На 468-ом CPU сейчас наврядли кого-то встретишь В третьих, каждый шарик не будет выполнять весь код, который я написал. Для используй дополнительную переменную, с помощью которой сделай так, чтобы код выполнялся только один раз, после последнего шага игры. Именно ИГРЫ, а не события шага! Тоесть ты сдвинул шарик, уничтожились группы шариков, сверху "попадали" новые шарики, и когда "все успокоится", должен выполниться код проверки для каждого шарика. Если это и съест много ресурсов, то только в течении доли секунды. |
|||
punker гроссмейстер Группа: Сообщество GM Сообщений: 287 |
Добавлено: 27-01-2007 00:15 | ||
Даже если код использовать в конце каждого хода, то всё равно комп будет временно подвисать. Мне кажется во всех подобных играх используется другой принцып, этот какой то ламерский. Может можно как нибудь одноцветные шарики расположенные рядом объеденять в группы, и если шариков в группе набирается определенное количество, то эта группа удаляется? |
|||
DaMaGeR-69 гроссмейстер Группа: Сообщество GM Сообщений: 173 |
Добавлено: 27-01-2007 09:42 | ||
Я же написал в первом своем сообщении в этой теме: Вот самый быстрый способ, чтобы много не думать: Если подумать, то получится и хороший способ.
А это по твоему ресурсов не сожрет? И чтобы объединить нужно все равно проверить по сколько шариков в линии.
Кстати, а ты на практике это попробовал? С каким количеством шариков? |
Страницы: 1 |
Game Maker Форум / Вопросы и Ответы (Для Опытных) / Удаление группы одинаковых объектов. |