Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.07.2009, 17:48   #1
Shadow_1329
Форумчанин
 
Аватар для Shadow_1329
 
Регистрация: 23.02.2009
Сообщений: 237
Радость Уменьшение загрузки ЦП и увеличение скорости программы.

Не стал писать в другой теме решил создать свою. У меня есть карта 30 на 30 тайлов где один тайл = 100 пикселям.Когда прорисована просто трава(текстуры хорошие!) загрузка ЦП уже составляет 20%. Затем я на катриу добавляю 3 дерева и загрузка ЦП уже 70% и игра начинает тормозить и играть невозможно. А если у меня там будут целые леса?! Тогда вообще перс будет стоять или оператива здохнет нафиг!!! Это же не дело! Я понимаю что возможно это из-за большого рамера карты или достаточно хорошых текстур, но я видел скрины из игры MMO 2D RPG и там графика и качество моих текстур почти не уступает ихним! А ведь и карта мне кажется там немалая! Но как я слышал так загрузка Цп 0%!!!!!! В общем обьясните из-за чего это пожалуйста, а то у меня уже битмап не хочет создаваться!
Shadow_1329 вне форума Ответить с цитированием
Старый 29.07.2009, 17:55   #2
Dj_smart
Капсула от спама
Форумчанин
 
Аватар для Dj_smart
 
Регистрация: 04.03.2008
Сообщений: 779
По умолчанию

Хм, сначала выясним как ты прорисовываеш графику?
Если на канвасе то это понятно - ты поручаешь проце рисовать вот он и загинается.
Нада рисовать аппаратно, через возможности видеокарты.
Если данный ответ не столь конкретен, как Вы желаете его увидеть, возможно необходимо поразмыслить, стоит ли вопрос того, чтобы о нём спрашивать на форуме?
CncFiles.ru - бесплатный файловый хостинг
Dj_smart вне форума Ответить с цитированием
Старый 29.07.2009, 18:01   #3
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Цитата:
но я видел скрины из игры MMO 2D RPG и там графика и качество моих текстур почти не уступает ихним! А ведь и карта мне кажется там немалая!
Битмап не самое лучшее для вывода большого количества графики. Поэтому нужно работать с DX/OpenGl, или использовать игровой движок. Можно пробовать оптимизировать вывод графики на Canvas (если это возможно). В твоем случае важно как ты загружаешь и используешь текстуры. У тебя каждый тайл загружается в собственный TBitmap или он один для всех одинаковых текстур?
Например нужно нарисовать 60 тайлов травы: некоторые по неопытности создают массив из 60 одинаковых битмапов и выводят каждую текстуру из элемента массива. Поскольку текстуры одинаковые можно создать один TBitmap, занести в него текстуру травы и использовать. Также если в игре есть скроллинг карты то можно не обрабатывать ее невидимые части и.т.д.
Вадим Буренков вне форума Ответить с цитированием
Старый 29.07.2009, 18:19   #4
Shadow_1329
Форумчанин
 
Аватар для Shadow_1329
 
Регистрация: 23.02.2009
Сообщений: 237
По умолчанию

Я прорисовываю все через канву. Чтобы использовать OpenGl или DirectX мне нужно больше опыта. Используя возможности видеокарты это думаю тот метод в котором нужны эти библеотеки. Движок чужой брать - уже слишком поздно это раз, так как многое уже сделано, а во вторых я не хочу использовать что-то не свое все будем делать мы с командой собственными руками и музыку писть и текстуры риосвать(ну парочку рисунков деревьев сопрем из 3д макс) Для одинаковых текстур я делаю один битмап. Скроллинг карты есть(а про не обрабатывание других частей карты это как?).
Shadow_1329 вне форума Ответить с цитированием
Старый 29.07.2009, 18:37   #5
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Цитата:
Я прорисовываю все через канву. Чтобы использовать OpenGl или DirectX мне нужно больше опыта. Используя возможности видеокарты это думаю тот метод в котором нужны эти библеотеки. Движок чужой брать - уже слишком поздно это раз, так как многое уже сделано, а во вторых я не хочу использовать что-то не свое
Ну да, я точно также думал пока не попробовал работать с движком. Просто исчезли проблемы с производительностью, появились новые возможности и технологии. Теперь я не думаю о том как убрать тормоза, сделать скроллинг карты и.т.д. а просто занимаюсь разработкой игры. И получившийся продукт будет более интересен как и мне, так и людям которые будут в него играть.
Вадим Буренков вне форума Ответить с цитированием
Старый 29.07.2009, 18:43   #6
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от Dj_smart Посмотреть сообщение
Нада рисовать аппаратно, через возможности видеокарты.
Ну почему же? ...не обязательно, ...просто нужно четко соблюдать последовательность команд, знать где требуется большая производительность от 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) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 29.07.2009, 19:04   #7
Shadow_1329
Форумчанин
 
Аватар для Shadow_1329
 
Регистрация: 23.02.2009
Сообщений: 237
По умолчанию

У меня загрузка большого куска карты(загрузка области) есть она как в Морровинде. Но размер одной области как раз и составляет 30 на 30 тайлов. Я уменьшу это число ради лучшей производительности. Деревья и другие обьекты у меня тоже большие(345 на 355), но с альфа-каналом и битболт'ом я еще не особо дружу. Хотя читал про все это. У меня средняя загрузка Цп сейчас составляет 50%. До применения хорошых текстур 0%. И еще почему-то перестал грузится Тбитмап.
Shadow_1329 вне форума Ответить с цитированием
Старый 29.07.2009, 20:09   #8
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Давай ка проанализируем последовательность вывода изображений в кадр, т.е. буфер.

1) Рисуем в буфер кадра подложку (цельный задний фон);
2) Рисуем в буфер кадра объекты по списку;
3) Рисуем в буфер кадра слой надписей (он всегда выше);
4) Рисуем в буфер кадра слой интерфейса (окна);
5) Выводим готовый кадр из буфера в форму.

Последний пункт работает со скоростью винды, т.е. 30 кадров в секунду, чего для 2D игры как говорится "за глаза".
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 29.07.2009, 20:18   #9
Shadow_1329
Форумчанин
 
Аватар для Shadow_1329
 
Регистрация: 23.02.2009
Сообщений: 237
По умолчанию

У меня все так. Но там еще нужно выводить их по слоям (т.е чтобы когда перс был сзади дерево то дерево рисовалось поверх него и когда он впереди то наоборот) от нижнего к верхнему, а вот это уже туговато.

Последний раз редактировалось Shadow_1329; 29.07.2009 в 20:20.
Shadow_1329 вне форума Ответить с цитированием
Старый 29.07.2009, 20:31   #10
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Добавь свойство Z к классу или как у тебя там что хранится. Потом пролистать все объекты и отрисовать те, у которых Z=max, вернуться в начало, вывести с Z=max-1, max-2 и т.д., вот тебе и слои
пыщь
JTG вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как можно самому сделать так, чтобы программы грузились с диска, до загрузки ОС? Лукманов Александр Софт 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