| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Движение изображения. Обновляем по таймеру |
| Автор: MoZy 4.8.2006, 21:01 |
| Как бы сделать чтобы этих полос не было и откуда они берутся? |
| Автор: GremlinProg 4.8.2006, 21:59 |
| Выводи изображение в окно через двойной буфер. Я так понял, ты выводишь большой битмап. |
| Автор: Sheff 4.8.2006, 22:13 | ||||
| MoZy, создай в памяти HDC ассоциируй с ним bitmap и рисуй на нём, а потов в OnDraw или на WM_PAINT не знаю как там у тебя рисуй из HDC в памяти на окне или где нужно... Т.е сначала:
Потом в OnDraw:
|
| Автор: MoZy 4.8.2006, 22:21 | ||
битмап маленький. таймер быстрый. а эти полосы... периодически появляются, причем период больше чем у таймера в несколько раз.
каким это образом? Мне надо по таймеру и чтоб окно не было "прозрачным" от этого двойного буфера. И полосы все равно проходят: ![]() Это иммитация, так как соскриншотить не получается Sheff, спасибо за идейку )) Я как видишь вроде как тоже сначала операции в скрытом хдц делаю, а потом на главный вовожу, но чтоб ВСЕ делать на скрытом (то есть все движения, все декорации Спасибо! |
| Автор: GremlinProg 4.8.2006, 22:29 |
Sheff, показал каким еще лучше перехватить сообщение WM_ERASEBKGND и не вызывать для него обработку "по-умолчанию", вместо этого, вернуть 1. Так задний фон не будет перекрашиваться каждый раз, когда требуется обновить окно. |
| Автор: Sheff 5.8.2006, 01:05 |
| MoZy, ты делаешь что-то типа игры ? Тогда лучше вообще наверное DirectX юзать или OGL т.к GDI очень прожорлив |
| Автор: MoZy 8.8.2006, 19:57 |
| Sheff, конечно прожорлив, но пока и так сойдет |
| Автор: OXOTHUK 10.8.2006, 10:23 |
| MoZy, в DirectX(я думаю имеется в виду Direct3D) и в OpenGL тебе придётся работать с 3х мерной графикой. А так как ты мутил на GDI, предполагаю тебе легче и сподручнее 2х мерную. Тогда надо использовать DirectDraw. Он в принципе простой, но у меня появились проблемы с поворотом изображения на угол и выводом текста. Правда в GDI если при прорисовке указать RECT source нормальный, а dest меньше, то появляются какие-то чёрные полосы, а в DirectDraw такого нет, поэтому путём несложных мат. вычислений, можно сделать один движок, но при задании разного разрешения экрана, он будет просто сжимать изображение и поэтому не придётся их двигать чтоб уместились в экране. Правда я не знаю, может тормозить он от этого больше станет? |
| Автор: Sheff 10.8.2006, 11:42 |
| OXOTHUK, DirectDraw уже не поддерживается в последних версиях библиотек DirectX, вся его функциональность была перенесена в Direct3D. Ему нужно юзать Direct3D или OpenGL в ORTHO режиме, OpenGL - графическая библиотека, и предназначена для программирования не только 3-х мерной графики. |
| Автор: OXOTHUK 10.8.2006, 15:35 |
| Sheff, ну ему ж никто не запрещаяет пользоваться DirectDraw 4 или 5. Работать - работает и быстро. А сам он проще. |
| Автор: Fixin 10.8.2006, 17:49 |
| Последний ДД был в 7й версии, это первое. И второе: Модератор: еще одно сообщение не по теме - закрою топик |
| Автор: MoZy 10.8.2006, 18:04 |
| Fixin, все по теме OXOTHUK, я не хочу менять разрешение. А на счет скорости GDI меня она устраивает, ведь там есть волшебные Get/SetDIBits, что обеспечивает свободу действия в достаточной мере, чтоб свои библиотеки забацать. Но тема действиетльно закрыта Спасибо. |