![]() |
Модераторы: Snowy, Alexeis, MetalFan |
![]() ![]() ![]() |
|
СЭНСЭЙ |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 432 Регистрация: 20.3.2006 Репутация: нет Всего: нет |
Привет всем.
Пишу программу - наработку для РПГ игры делаю процедуру выводящую изображение. Проблема в том, что на Р-233м вывод изображения работает медленно. Не буду описывать все детали, приведу тектс процедуры и экзешник. Весь проект скидывать ну буду что бы не возникалдо лишних вопросов
Добавлено через 1 минуту и 11 секунд извини сразу за возможно лишний код и за непонятные моменты спрашивайте если что , я отвечу на все вопросы Присоединённый файл ( Кол-во скачиваний: 10 ) ![]() |
|||
|
||||
СЭНСЭЙ |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 432 Регистрация: 20.3.2006 Репутация: нет Всего: нет |
хочу уточнить вопрос
на старом компе программа работает с задержкой из за чего у меня возникает подозрение что этот алгоритм по части графики далек от совершенства и возможно некорректно выполнен подсажите пожалуйста что можно здесь улучшить по части графики и какие вообще могут быть альтернативы решения этой задачи (вывод больного изображения с возможностью скорлла) |
|||
|
||||
~FoX~ |
|
|||
![]() НЕ рыжий!!! ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2819 Регистрация: 8.10.2003 Где: Зеленоград Репутация: 2 Всего: 68 |
||||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 1 Всего: 64 |
Забыл ![]() СЭНСЭЙ, так у вас не получится хорошей игры ИМХО. Как писал ~FoX~, как минимум нужно использовать GDI. -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
AntonN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: 7 Всего: 18 |
а он и использует GDI...
|
|||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 1 Всего: 64 |
Напрямую используется только bitblt (может ещё что-то...), а всё остальное - это Борлондовская высотка над GDI. Естественно, работать будет медленнее. -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
AntonN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: 7 Всего: 18 |
медленее, в лучшем случае процента на 2-3, а в большинстве случаев на 0.5%
![]() |
|||
|
||||
СЭНСЭЙ |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 432 Регистрация: 20.3.2006 Репутация: нет Всего: нет |
Погодите, товарищи, уважаемые...
у меня ведь именно несколько последовательных bitblt в конце процедуры и выполняются медленно. Я ведь потому спрашиваю что есть же досовские реалтайм стратегии и под винду тот же старкрафте где скролл карты шустро вертится а там как я понимаю в любой момент времени любой участок размером с экран должен быть доступен. У меня в процедуре формируется большое изображение это да... но кажется сам его вывод и тормозит... эх... ладно. Попробую создать под каждый спрайт отдельную переменную, может будет быстрее ((( |
|||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 1 Всего: 64 |
Не играл. Но более чем уверен, что там D3D или OpenGL. -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
~FoX~ |
|
|||
![]() НЕ рыжий!!! ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2819 Регистрация: 8.10.2003 Где: Зеленоград Репутация: 2 Всего: 68 |
Используй буферизацию, т.е. подготавливай следующий кадр изображения до его показа... Хоть и чисто спрайтовый вывод изображения, все равно через DX |
|||
|
||||
AntonN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: 7 Всего: 18 |
В досовских стратегиях размер экрана меньше, чем экраны сейчас.
Никаких DX и OGL, там попиксельный спрайтовый вывод, в принципе это реально делать и сейчас, если отойти от GDI и углубиться вниз до работы с данными напрямую (байт в массиве-спрайта по указателю). Но это муторно, хоть и с каким то результатом. Подобные вещи тестировали тут http://forum.vingrad.ru/index.php?showtopi...t&p=1735799 Автору советовал изучать OGL или DX, врядли текущий проект будет доделан и не выглядеть как куча костылей, но зато получишь опыт и возможно сделаешь что то другое. bitblt() это очень быстрая штука, для блита копированием лучше придумать сложно, другое дело если нужно будет блитить с эффектами (с прозрачным цветом, с альфой, с полупрозрачностью) - вот тут тормоза и вылезут. Так же совет по подобным извращенным играм - создавать все объекты заранее (никаких созданий буферов во время вывода и рисования спрайтов), рисовать на буферах. Возможно что то поможет отсюда http://desksoft.ru/index.php?files&id=3&owner=3 |
|||
|
||||
СЭНСЭЙ |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 432 Регистрация: 20.3.2006 Репутация: нет Всего: нет |
Слушайте , вы если советуете , то сначала хоть взгляните на мой код.
Я конечно не мастер, но во первых я и так рисую сначала на буфере. Именно процесс рисования и долго работает на старых компах. еще во первых (парад первым во первых) у меня пошаговый режим. Я и так подготавливаю рисунок как отдельный этап. Но хочу что бы это было быстрее. во вторых рисования спрайтов у меня и так нет. Есть только загрузка из объекта имейдж лист, и их копирование на общую картинку. Ну тут уж врядли проще можно. уважаемый FOX - как я могу показать кадр не подготовив его изначально? Проблема всего лишь в том, что само формирование такого большого изображения (33*21х33*21=693х693) хотя оно в общем то не такое уж и большое, а даже небольшое, занимает ощутимое время на первом пне. Ну если не будет никаких решений то попробую разобраться в ДХ, хотя как то же эти проблемы раньше решали в старых играх. |
|||
|
||||
eXtr0gen |
|
||||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 2.2.2010 Репутация: нет Всего: нет |
Классическим GDI на таком компе даже не все компоненты по современному без тормозов отрисуешь. Здесь люди правильно советуют не тянуть кота за хвост и переходить на DX или GL. Что до меня то рекомендую DGLEngine. Самый простой и интуитивный движок, который идеально тебе подойдет. Там есть все необходимое для написание простенькой и не очень как 2D так и 3D игры.
// Можно проще. Смотри в сторону TObjectList и хранения в нем битмапов. Только от проблемы медленной перерисовки тебя это все равно не избавит. Предел возможностей есть не только у железа твоего ПК, но и у GDI графики. // На код взглянул.
Это смахивает больше на кашу. Отведи отдельный юнит. В нем опиши классы обьектов. К ним напиши функции, словом - поработай сейчас, чтобы не ломать голову потом. Это тебе же поможет. Как минимум:
Далее создай свою реализацию TList на основе данного обьекта и работа уже будет намного проще и приятнее. Это сообщение отредактировал(а) eXtr0gen - 2.2.2010, 21:55 |
||||
|
|||||
СЭНСЭЙ |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 432 Регистрация: 20.3.2006 Репутация: нет Всего: нет |
Спасибо за дельные советы.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Звук, графика и видео" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |