добавить программу | главная | форум | hot spot | рассылки | информеры | партнёры | ссылки

 -> на главную

С 7 марта 2014 г. GetSoft.ru превращён в музей программ и работает в режиме read-only.

разделы форума

Об этом сайте

Игры

Софт

Windows

Linux

Железо

Разное

программы

Интернет  

Игры  

Программирование  

Мультимедиа  

Редакторы  

Утилиты  

Научные и прикладные  

Рабочий стол  

Экономические  

Электронные издания  

Другие  

Форум \ Windows \

Весь форум

Форум \ Windows \

Windows

Форум \ Windows \

Игра "Жизнь"

Пожалуйста, зарегистрируйтесь. Это позволит вам создавать свои темы, редактировать оставляемые вами сообщения и получать ответы на них.

8R0N

exp: 1

6 ноября 2006   21:38

Программа: игра "Жизнь".
Среда реализации: VC++ 7.0.
Интерфейс: real-time изменение колонии.
Проблема: окно не успевает прорисовать уже поставленных паразитов на сообщение WM_PAINT.
Исходник: высылается по желанию.

Детализирую проблему:
При изменении размеров окна создаётся временная матрица, в которую заносятся значения из старой матрицы. Далее изменяются размеры новой матрицы в
соответствии с размерами паразита и окна. Временная матрица копируется в новую.

Функция отрисовки матрицы Draw() класса CMatrix:

for (i = 0; i < uGridWidth; i++)
for (j = 0; j < uGridHeight; j++)
DrawCell(i, j, GetCellParam(i, j, CELL_ALIVE));

Окно не успевает перерисовываться. Если в этой функции рисовать одну-две (в общем, не очень много) точки, проблемы нет. Так в чём же дело?..

С уважением,
EiTRoN

ответить



верховный администратор
exp: 489

7 ноября 2006   9:32

+ 11 часов 54 минуты

Как я понимаю, включено отображение окна в ходе изменения его размеров и не устраивает моргание картинки в ходе этого процесса. Видятся два решения:

1. Перед началом изменения размеров (до первой перерисовки) скопировать всё содержимое окна в одну CBitmap. Потом при масштабировании не отрисовывать клетки по одной, а копировать в окно сразу всю bitmap. Фон (добавляющиеся пустые клетки, возникающие при изменении размеров окна) тоже хорошо бы хранить в виде больших картинок, скажем, 20 на 20 клеток, ведь они в любом случае пустые. Чем меньше картинок и чем больше каждая из них, тем быстрее осуществляется рисование. Будет шанс успеть отрисовать один кадр за разумное время, что исключит моргание. Естественно, таймер жизни нужно остановить на время масштабирования окна.

2. Если не помогает, можно вообще ничего не делать, пока пользователь не отпустит мышь и размеры окна не установятся. И уже тогда перерисовать всё, не будучи ограниченным по времени.

ответить

8R0N

7 ноября 2006   21:31

+ 11 часов 58 минут

Спасибо большое!
Принимаюсь за реализацию...

ответить

Сортировать:   по дате + -

На странице:   20   50   100   все

оставить сообщение

С 3 марта 2014 эта возможность закрыта. GetSoft.ru превращён в музей программ.


Warning: require_once(/var/www/vhosts/u0247414.plsk.regruhosting.ru/getsoft.ru/eeb7b797fe13e753ff814b8f859edc01b09fb232/trustlink.php): failed to open stream: No such file or directory in /var/www/vhosts/u0247414.plsk.regruhosting.ru/getsoft.ru/def_ad.php on line 228

Fatal error: require_once(): Failed opening required '/var/www/vhosts/u0247414.plsk.regruhosting.ru/getsoft.ru/eeb7b797fe13e753ff814b8f859edc01b09fb232/trustlink.php' (include_path='.:') in /var/www/vhosts/u0247414.plsk.regruhosting.ru/getsoft.ru/def_ad.php on line 228