Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Надо ли???


Страницы:   1 2

drake ©   (2002-12-22 23:58:00) 

Решил написать Life-подобную прогу, использовал поначалу канвас,
но по мере увеличения количества клеток столкнулся с приличными тормозами графики, есть маза поменять приоритет программы на более высокй, но это черевато неприятными последствиями и глюками винды, а можно и переписать вывод графики под Opengl, так вот вопрос: что лучше сделать???


dRake   (2002-12-26 23:10:00) [1]

лана пусть живёт прога как есть, а я лучше щас фрактальчиками займусь :)


AlexT1000   (2002-12-26 12:10:00) [2]

да . на канвас формы наиболее быстро. и помогает та штука,
которую я тебе написал


dRake   (2002-12-24 23:04:00) [3]

2 AlexT1000
Кстати играет какую нибудь роль то, что я вывожу не на канву формы,а на канвас paintbox"а??


AlexT1000   (2002-12-24 18:17:00) [4]

> dRake

насколько я помню эта процедура как следует из ее имени отрабатыет очистку бэкграунда формы . если возвращать 1 то ты типа сам отвечаешь за очистку этой формы. иначе винды.
что то в этом роде.
вообщем несколько устраняет блыманье


sniknik   (2002-12-24 17:09:00) [5]

dRake © (24.12.02 14:28)
>а вот графа реально просаживает машину

а если сделать многопоточным? реальный способ разгрузить процесс.


dRake   (2002-12-24 14:45:00) [6]

Ещё просьба, если кто-то писал похожую игру: киньте пожалуйста исходники мне на мыло, буду очень признателен :)


dRake   (2002-12-24 14:31:00) [7]

>procedure WMErase(var msg:TMessage); message WM_ERASEBKGND;
>procedure TFormImage.WMErase(var msg: TMessage);
>begin
> msg.Result := 1;
>end;

2 AlexT1000 : А ты не прокоментируешь, что делают эти процедуры??


dRake   (2002-12-24 14:28:00) [8]

Вот вывод на битмап в память с последующим выводом на канвас
мне реально помог,исчезло моргание, я посмотрел - математика
реально почти не влияет - что миллион на миллион, что 100Х100
разницы почти нет(если графику отключить), а вот графа реально просаживает машину, попробую попросить другана через GL вывод графики делать... Кстати никто не подскажет, можно ли как-нибудь
быстрее выводить графику, не использую методы канваса, используя например winAPI или что-нибудь подобное??


Snap   (2002-12-24 11:35:00) [9]

А не прдкинете примерчик работы с DIB?


AlexT1000   (2002-12-24 11:30:00) [10]

ты однозначно что то неправильно делаешь.
пересчитывать вообще нужно только, те которые будут в данный момент видны на экране.
и соответсвенно рисовать только их .
во вторых есть пару трюков которые ускоряют вывод на канву формы и убирают мерцание
procedure WMErase(var msg:TMessage); message WM_ERASEBKGND;
procedure TFormImage.WMErase(var msg: TMessage);
begin
msg.Result := 1;
end;
это раз. во вторых как говорил MBO рисовать все на битмап в памяти а потом гнать на форму.
ну и естественно заготовить текстуры квадратиков заранее и просто делть bitblt их на битмап.
вот такт то.


jfo   (2002-12-24 09:45:00) [11]

Хм года 2 назад писал подобную прогу... скорость достаточно высокая... правда и поле не сильно большое... если бы была возможность выложить в кладовку (не выкладывается) выложил бы :-)


sniknik   (2002-12-24 08:34:00) [12]

Danlicha © (23.12.02 22:58)
Про пикселя никто не говорил, с чего ты взял? Есть такое понятие, область просмотра, и размер клеток каой хочется такой и ставится. Ты ветку вообще читал, что обсуждается?


Danlicha   (2002-12-23 22:58:00) [13]

Да что вы ерундой занимаетесь, пардон. Во-первых, лайф красивее, когда она не по пикселям, а по довольно большим квадратикам. Их ещё можно разными цветами разукрашивать - ворзаст. А если уж припёрло по пикселям - не нужно никакого DirectDraw - берёте битмап, делаете его DIB, получаете адрес его в памяти и рисуете туда. И не надо никакого асемблера!


down   (2002-12-23 22:54:00) [14]

Нужно хранить не массив клеток в миллион на миллион, а список координат "живых" клеток, тогда и памяти меньше уйдет, и обработка будет быстрее.


sniknik   (2002-12-23 22:31:00) [15]

Еще в а голову пришло, элементарно конечно а вдруг у тебя не так.
Смысл. Рисовать не все подряд, а только если в клетке произошли изменения.

и насчет математики, как думаеш сколько занимает общет "миллион на миллион"? поставь у себя такой масив (если получится) и отключи вывод нахрен. (посмотреть на чистое время расчета)


drake   (2002-12-23 22:00:00) [16]

хз у меня тоже примерно одинаковые скорости что с галкой, что без неё, но как шустро она пашет-то ;) мне бы исходнички её =)
тем более что писана она на дельфах 3


sniknik   (2002-12-23 20:23:00) [17]

Посмотрел,
там в опциях есть галочка Enable DirectX, так вот при обоих положениях этой галочки скорость отрисовки (у меня) одинакова.
скачивал
Life32 v2.15
с http://life32.lifepatterns.net
чегото мне кажется что единственное оправдание этой галочки ссылка внизу "скачать DirectX" (на правах рекламы).

но это конечно мое личное мнение.


drake   (2002-12-23 19:46:00) [18]

ну почему не для??? посмотри прогу Life32 там массив клеток миллион на миллион и работает очень быстро и прога эта юзает для
вывода графики directX вот так.


sniknik   (2002-12-23 19:19:00) [19]

еще совет если позволите, отрисовку самих клеток тоже делай через Canvas.Draw(x, y, BitMask), естественно сначала нарисуй шаблоны. И над математикой подумай (не верю что она у тебя идеальна) может на asm расчеты делать?.

а directX вряд ли поможет, ну не для этого он, по моему.


drake   (2002-12-23 19:02:00) [20]

Попробовал оба способа....
Результат : при выводе на виртуальный имаг с последуюшим
переносом на канвас результата никакого 12-13fps как и было
2) Попробовал создать разные кисти заранее - fps просел до 8 :(
Пока что самый быстрый вариант у меня с самого начала был ,
похоже придётся сесть разучивать directX :)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо