|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
29.07.2009, 17:48 | #1 |
Форумчанин
Регистрация: 23.02.2009
Сообщений: 237
|
Уменьшение загрузки ЦП и увеличение скорости программы.
Не стал писать в другой теме решил создать свою. У меня есть карта 30 на 30 тайлов где один тайл = 100 пикселям.Когда прорисована просто трава(текстуры хорошие!) загрузка ЦП уже составляет 20%. Затем я на катриу добавляю 3 дерева и загрузка ЦП уже 70% и игра начинает тормозить и играть невозможно. А если у меня там будут целые леса?! Тогда вообще перс будет стоять или оператива здохнет нафиг!!! Это же не дело! Я понимаю что возможно это из-за большого рамера карты или достаточно хорошых текстур, но я видел скрины из игры MMO 2D RPG и там графика и качество моих текстур почти не уступает ихним! А ведь и карта мне кажется там немалая! Но как я слышал так загрузка Цп 0%!!!!!! В общем обьясните из-за чего это пожалуйста, а то у меня уже битмап не хочет создаваться!
|
29.07.2009, 17:55 | #2 |
Капсула от спама
Форумчанин
Регистрация: 04.03.2008
Сообщений: 779
|
Хм, сначала выясним как ты прорисовываеш графику?
Если на канвасе то это понятно - ты поручаешь проце рисовать вот он и загинается. Нада рисовать аппаратно, через возможности видеокарты.
Если данный ответ не столь конкретен, как Вы желаете его увидеть, возможно необходимо поразмыслить, стоит ли вопрос того, чтобы о нём спрашивать на форуме?
CncFiles.ru - бесплатный файловый хостинг |
29.07.2009, 18:01 | #3 | |
Участник клуба
Регистрация: 06.03.2009
Сообщений: 1,346
|
Цитата:
Например нужно нарисовать 60 тайлов травы: некоторые по неопытности создают массив из 60 одинаковых битмапов и выводят каждую текстуру из элемента массива. Поскольку текстуры одинаковые можно создать один TBitmap, занести в него текстуру травы и использовать. Также если в игре есть скроллинг карты то можно не обрабатывать ее невидимые части и.т.д. |
|
29.07.2009, 18:19 | #4 |
Форумчанин
Регистрация: 23.02.2009
Сообщений: 237
|
Я прорисовываю все через канву. Чтобы использовать OpenGl или DirectX мне нужно больше опыта. Используя возможности видеокарты это думаю тот метод в котором нужны эти библеотеки. Движок чужой брать - уже слишком поздно это раз, так как многое уже сделано, а во вторых я не хочу использовать что-то не свое все будем делать мы с командой собственными руками и музыку писть и текстуры риосвать(ну парочку рисунков деревьев сопрем из 3д макс) Для одинаковых текстур я делаю один битмап. Скроллинг карты есть(а про не обрабатывание других частей карты это как?).
|
29.07.2009, 18:37 | #5 | |
Участник клуба
Регистрация: 06.03.2009
Сообщений: 1,346
|
Цитата:
|
|
29.07.2009, 18:43 | #6 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Ну почему же? ...не обязательно, ...просто нужно четко соблюдать последовательность команд, знать где требуется большая производительность от CPU и заменять на самые скоростные методы. Также понимать, что некоторые объекты или группы объектов не всегда обновляются и их можно выводить только по началу их изменения. Например поверхность карты (у меня 50х80 тайлов по 25х49 пикселов). Она не всегда изменяется, только когда персонаж перешел в соседнюю клетку, а до этого момента происходит отображение заготовленного большого куска таким образом, что карта просто смещается на экране под ногами главного персонажа. Как только персонаж оказался в следующей клетке запускается процедура создания нового большого куска карты, уже по новым областям в массиве карты.
Вся отрисовка графики у меня выполнена через ассемблерные вставки, притом использована специальная поддержка MMX, которая есть на всех процах Intel, ...это ускорение копирования информации за счет специальных регистров и за счет манипулирования пакованными данными. Как это делается я описывал в теме "Как вы относитесь к созданию игр на Delphi?". Момент довольно сложный для новичка, но если внимательно почитать, то разобраться можно. Вывод графики на экран выполняет BitBlt() из библиотеки GDI. Учитывая, что слоев у меня 5, объекты в размере довольно большие (Деревья - 450х500) и их может быть много, выполнена поддержка альфа-канала, есть доступ к каждому пикселю на экране, возможно применить любые 2D эффекты к каждому объекту независимо, есть киношная анимация всех объектов, то 20% загрузки CPU меня вполне устраивает, ...я уверен, что это не предел.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
29.07.2009, 19:04 | #7 |
Форумчанин
Регистрация: 23.02.2009
Сообщений: 237
|
У меня загрузка большого куска карты(загрузка области) есть она как в Морровинде. Но размер одной области как раз и составляет 30 на 30 тайлов. Я уменьшу это число ради лучшей производительности. Деревья и другие обьекты у меня тоже большие(345 на 355), но с альфа-каналом и битболт'ом я еще не особо дружу. Хотя читал про все это. У меня средняя загрузка Цп сейчас составляет 50%. До применения хорошых текстур 0%. И еще почему-то перестал грузится Тбитмап.
|
29.07.2009, 20:09 | #8 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Давай ка проанализируем последовательность вывода изображений в кадр, т.е. буфер.
1) Рисуем в буфер кадра подложку (цельный задний фон); 2) Рисуем в буфер кадра объекты по списку; 3) Рисуем в буфер кадра слой надписей (он всегда выше); 4) Рисуем в буфер кадра слой интерфейса (окна); 5) Выводим готовый кадр из буфера в форму. Последний пункт работает со скоростью винды, т.е. 30 кадров в секунду, чего для 2D игры как говорится "за глаза".
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
29.07.2009, 20:18 | #9 |
Форумчанин
Регистрация: 23.02.2009
Сообщений: 237
|
У меня все так. Но там еще нужно выводить их по слоям (т.е чтобы когда перс был сзади дерево то дерево рисовалось поверх него и когда он впереди то наоборот) от нижнего к верхнему, а вот это уже туговато.
Последний раз редактировалось Shadow_1329; 29.07.2009 в 20:20. |
29.07.2009, 20:31 | #10 |
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
Добавь свойство Z к классу или как у тебя там что хранится. Потом пролистать все объекты и отрисовать те, у которых Z=max, вернуться в начало, вывести с Z=max-1, max-2 и т.д., вот тебе и слои
пыщь
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как можно самому сделать так, чтобы программы грузились с диска, до загрузки ОС? | Лукманов Александр | Софт | 1 | 18.04.2009 12:14 |
оптимизировать для максимальной скорости выполнения программы, т.е. заменить ее кодом на ассемблере | gusluk | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 6 | 10.12.2008 04:21 |
Увеличение и уменьшение картинок | zzzzz | Мультимедиа в Delphi | 2 | 30.08.2008 20:53 |
запуск программы после загрузки Windows | matus | Windows | 3 | 25.04.2008 11:16 |
отслеживание загрузки программы | ГОСЕАН | Общие вопросы Delphi | 4 | 13.12.2007 18:04 |