MaximSokol, считать колизии для всех блоков постоянно - не оптимальный путь .
Как я понял , блоки у тебя одинаковые , то используй двумерный массив а лучше дата структуру GM - "сетку". 1)Создаём массив занятых блоками ячеек . Координаты блока на экране будут : ширина спрайта*х + смещение высота спрайта*у +смещение
2)Если блок падает сверху то проверяем занята ли нижняя ячейка у-1 если занята то когда блок достигнет ячейки над ней он отстаеавливается
3)если разрушена ячейка x,y то проверяются ячеки над ней у+1, у+2 ... и т д и если там есть блоки то они двигаются согласно пункту 2)
Не надо издеваться над GM 1) 6-7 текстур земли с разрешением 4049 на 4049 в формате jpg во внешней папке будит весить 2-3 Мб . 2) В игру графика в формате PNG и GIF встравляется без изменений а графика jpg загружается без сжатия - вот и 2-3 Мб превращаются в 100 Мб 3) А теперь страшная тайна ! ваши спрайты , фоны и другая графика при запуске игры будет кушать не 100 Мб оперативной памяти а во много раз в больше!!! Это утечка памяти ... и в процессе игры она может рости. В итоге ваши 2-3 Мб могут вырости под 1Гб оперативной памяти и вы будите ругать GM , когда сами виноваты .
сейчас поэкспериментировал с бекграундами (хоть это совсем не то что нужно автору) 1)с растянутым одним пикселем на фоне 420 fps 2)с "замощёными" фонами 32х33 - 255 fps 3) с одним большим фоном 1024x768 - 320 fps
Да ты гонишь? Я использую полупрозрачность бэков в 3Д играх, ни одного глюка замечено не было...
есть , да ещё какие ! Если ты незаметил ни одного , это не значит что их нет Я отрисовывал примитивами с альфой экран , а затем преобразовавал в бекграунд ...на 3 разных компьютеров получилось поразному : 1) бекграунд получился как и положено с альфаканалом 2) с альфаканалом но местами были заметны треугольники примитивов 3)вообще без альфаканала Наверно это от видеокарты зависит ...
во второй комнате ты забыл поставить максимальную скорость , поэтому и производительность выше в 2 раза если поставить нормальную скорость то при прорисовки прямоугольника наоборот выше скорость на немного . Всё дело в том что в твоём примере в обоих случаях идёт отрисовка текста на экране а у меня отрисовки текста нет (значения fps в кэпшене комнаты) что позволло при растяжки спрайта отказаться от случая "Draw" и повысить производительность .
PS. Если отрисовать спрайт в "сурф" то должно быть ещё быстрее
FPS это снизит не сильно. А вот если "растянуть" спрайт в сотни и тысячи раз. То качество будет отстой, это вам любой кто имеет дело с цифровыми изображениями скажет. Известно что "цифровой" зум хуже оптического, потому, что цифровой зум, это "растягивание" изображения. Вы головой то думайте прежде чем писать. .
Давай подумаем головой вместе - автору нужно заполнение экрана одним цветом с альфамаской , поэтому 1) Растянуть спрайт хоть в 10 раз хоть в милион раз 2) засположить тайлами одноцветных спрайтов 3)или отрисовать прямоугольник получим одинаковый визуальный эффект
Quote (anisimov)
Чем меньше размер изображения тем оно легче. Большое число небольших спрайтов не особо повлияет на быстродействие. Это давно известно. А вот если поставить "сплошной" фон, действительно будет солидное замедление, либо мы возьмём фон 1024 на 768 либо просто закроем это пространство спрайтами например 32 на 32.
1)какой фон? - автору надо рисовать поверх спрайтов , а отрисовать можно объектами , тайлами или примитивами . 2)один спрайт 1024х768 в Game_Maker отрисуется намного быстрее , чем раз 768 спрайта 32х32 . Если желание будит потом сделаю пример .
как ты меня процитировал , если не я эту фразу писал ? незнаю что там у тебя за проблема - я скачал , нормально открыл...
Quote (Made_In_USSR)
А возможно ли сделать динамический альфа канал, как это реализовано в fallout 1/2. Тоесть прозрачность задавать динамически в зависимости от положения гг и обьектов перед ним и за ним
Делаем спрайт небольшого размера например 24 на 24 или 32 на 32. И организуем заполнение экрана [spoiler]такими спрайтами. Растягивать глупо, так как при масштабировании ухудшается качество изображения.
1)вопрос изначально был про заполнении одним цветом большой промежуток комнаты - тут легче всего или растянуть один пиксели или отрисовать прямоугольник .
2)если просто заполненить бесшовными спрайтами 32х32 , то при размере экрана 1024х768 получиться 768 объектов - это сильно снизит fps . Но это можно поборов , если эти спрайты отрисовать на экране - сохранить в "сурф" и отрисовывать как один большой спрайт , а мелкие удалить ...
Quote (Link6768)
блин, чтобы найти в сети нужно уметь объяснить это как сделать чтобы у фона сначала была прозрачность 0.1, потом 0.2 - 0.3 - 0.4 - 0.5 Анимация как бы, чтобы в определённый момент вот таким появился,
если прозрачность нужно менять всего фона , то 1)при отрисовки прямоугольника - меняй его draw_set_alpha(...); 2)при растяжения пикселя - image_alpha (...)
Сообщение отредактировал Qvant - Воскресенье, 06 Июня 2010, 20:54
Ставь в своём игровом объекте окне depth со значением меньше чем юниты и здания
Quote (Made_In_USSR)
Эм... ну это не совсем то. можно было сгладить спрайт альфа-каналом за счет зарисовывания "подсвечиванием" (оно же "затемнением") смежных пикселей (эдакий ореол вокруг спрайта получался). Частичную же прозрачность одного пикселя из масива через альфа-канал поддерживает только восьмая версия.
не путай сглаживание по краям спрайта с 50% прозрачностью с альфаканалом спрайта ... потрать 5 минут времени и проверь как работает функция sprite_set_alpha_from_sprite в 7 версии ГМ и ты поймёш что ошибался
в 8 версии можно загружать спрайт вместе с альфаканалом в ресурся а в 7 альфаканал можно прикрутить к спрайту этой фунцией .
1) Используй очередь - можно добавлять новые карты в конец очереди а из начала получать и убирать 3)Вначале создаёш сетку (почти как двумерный массив - подробности в справке) , в которой хрянятся id ячеек с монстрами . если появилась ячейка есть хоть с одним монстром , создаёш список монстров в этой ячейке и получаеш id списка , эту id загружаем в нужную ячейку сетки . дальше перемешаем ячейки сетки согласно вашему алгоритму ...
Если нужно узнать есть ли в данной ячейке сетки монстры (например мы передвинули эту ячейку к замку и нужно знать , есть там кто то или нет) читаем значение id если оно не нулевое , то по этому id находим список монстров...