| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Звук, графика и видео > вывод спрайтов |
| Автор: СЭНСЭЙ 20.1.2010, 12:03 | ||
| Привет всем. Пишу программу - наработку для РПГ игры делаю процедуру выводящую изображение. Проблема в том, что на Р-233м вывод изображения работает медленно. Не буду описывать все детали, приведу тектс процедуры и экзешник. Весь проект скидывать ну буду что бы не возникалдо лишних вопросов
Добавлено через 1 минуту и 11 секунд извини сразу за возможно лишний код и за непонятные моменты спрашивайте если что , я отвечу на все вопросы |
| Автор: СЭНСЭЙ 21.1.2010, 16:43 |
| хочу уточнить вопрос на старом компе программа работает с задержкой из за чего у меня возникает подозрение что этот алгоритм по части графики далек от совершенства и возможно некорректно выполнен подсажите пожалуйста что можно здесь улучшить по части графики и какие вообще могут быть альтернативы решения этой задачи (вывод больного изображения с возможностью скорлла) |
| Автор: artsb 21.1.2010, 21:24 |
Забыл СЭНСЭЙ, так у вас не получится хорошей игры ИМХО. Как писал ~FoX~, как минимум нужно использовать GDI. |
| Автор: AntonN 21.1.2010, 23:13 |
| а он и использует GDI... |
| Автор: artsb 21.1.2010, 23:54 |
Напрямую используется только bitblt (может ещё что-то...), а всё остальное - это Борлондовская высотка над GDI. Естественно, работать будет медленнее. |
| Автор: AntonN 22.1.2010, 01:33 |
| медленее, в лучшем случае процента на 2-3, а в большинстве случаев на 0.5% |
| Автор: СЭНСЭЙ 22.1.2010, 12:10 |
| Погодите, товарищи, уважаемые... у меня ведь именно несколько последовательных bitblt в конце процедуры и выполняются медленно. Я ведь потому спрашиваю что есть же досовские реалтайм стратегии и под винду тот же старкрафте где скролл карты шустро вертится а там как я понимаю в любой момент времени любой участок размером с экран должен быть доступен. У меня в процедуре формируется большое изображение это да... но кажется сам его вывод и тормозит... эх... ладно. Попробую создать под каждый спрайт отдельную переменную, может будет быстрее ((( |
| Автор: artsb 22.1.2010, 12:24 |
Не играл. Но более чем уверен, что там D3D или OpenGL. |
| Автор: ~FoX~ 22.1.2010, 12:44 |
Используй буферизацию, т.е. подготавливай следующий кадр изображения до его показа... Хоть и чисто спрайтовый вывод изображения, все равно через DX |
| Автор: AntonN 22.1.2010, 13:43 |
| В досовских стратегиях размер экрана меньше, чем экраны сейчас. Никаких DX и OGL, там попиксельный спрайтовый вывод, в принципе это реально делать и сейчас, если отойти от GDI и углубиться вниз до работы с данными напрямую (байт в массиве-спрайта по указателю). Но это муторно, хоть и с каким то результатом. Подобные вещи тестировали тут http://forum.vingrad.ru/index.php?showtopic=241113&view=findpost&p=1735799 Автору советовал изучать OGL или DX, врядли текущий проект будет доделан и не выглядеть как куча костылей, но зато получишь опыт и возможно сделаешь что то другое. bitblt() это очень быстрая штука, для блита копированием лучше придумать сложно, другое дело если нужно будет блитить с эффектами (с прозрачным цветом, с альфой, с полупрозрачностью) - вот тут тормоза и вылезут. Так же совет по подобным извращенным играм - создавать все объекты заранее (никаких созданий буферов во время вывода и рисования спрайтов), рисовать на буферах. Возможно что то поможет отсюда http://desksoft.ru/index.php?files&id=3&owner=3 |
| Автор: СЭНСЭЙ 22.1.2010, 14:17 |
| Слушайте , вы если советуете , то сначала хоть взгляните на мой код. Я конечно не мастер, но во первых я и так рисую сначала на буфере. Именно процесс рисования и долго работает на старых компах. еще во первых (парад первым во первых) у меня пошаговый режим. Я и так подготавливаю рисунок как отдельный этап. Но хочу что бы это было быстрее. во вторых рисования спрайтов у меня и так нет. Есть только загрузка из объекта имейдж лист, и их копирование на общую картинку. Ну тут уж врядли проще можно. уважаемый FOX - как я могу показать кадр не подготовив его изначально? Проблема всего лишь в том, что само формирование такого большого изображения (33*21х33*21=693х693) хотя оно в общем то не такое уж и большое, а даже небольшое, занимает ощутимое время на первом пне. Ну если не будет никаких решений то попробую разобраться в ДХ, хотя как то же эти проблемы раньше решали в старых играх. |
| Автор: eXtr0gen 2.2.2010, 21:47 | ||||
| Классическим GDI на таком компе даже не все компоненты по современному без тормозов отрисуешь. Здесь люди правильно советуют не тянуть кота за хвост и переходить на DX или GL. Что до меня то рекомендую DGLEngine. Самый простой и интуитивный движок, который идеально тебе подойдет. Там есть все необходимое для написание простенькой и не очень как 2D так и 3D игры. // Можно проще. Смотри в сторону TObjectList и хранения в нем битмапов. Только от проблемы медленной перерисовки тебя это все равно не избавит. Предел возможностей есть не только у железа твоего ПК, но и у GDI графики. // На код взглянул.
Это смахивает больше на кашу. Отведи отдельный юнит. В нем опиши классы обьектов. К ним напиши функции, словом - поработай сейчас, чтобы не ломать голову потом. Это тебе же поможет. Как минимум:
Далее создай свою реализацию TList на основе данного обьекта и работа уже будет намного проще и приятнее. |
| Автор: СЭНСЭЙ 22.2.2010, 18:02 |
| Спасибо за дельные советы. |