перерисовка поля игры Lines
От: anais  
Дата: 22.11.04 07:12
Оценка:
пишу игру на VC++ Lines.
игра работает, но не эффективно реализуется перерисовка поля — в OnDraw() класса CLinesView — каждый раз осуществляется полная перерисовка. как сделать это наиболее правильно?

CRaster — класс рисования
CBall — класс шарик, рисует шарик,активный шарик, шарик при удалении
CField — класс поля игры, при прорисовки вызывает 81(поле 9 на 9) раз функцию CBall::Draw(CDC *pDC)
CLinesView — в OnDraw вызывает field.Draw();

наверное, было бы правильно всякий раз перерисовывать не всё поле, а только 2 клеки — результат движения шарика, слышала про использование буффера для более быстрой работы, но как это сделать — не понимаю. подскажите.

23.11.04 01:06: Перенесено модератором из 'C/C++. Прикладные вопросы' — Павел Кузнецов
Re: перерисовка поля игры Lines
От: aka50 Россия  
Дата: 22.11.04 07:27
Оценка:
Здравствуйте, anais, Вы писали:

A>пишу игру на VC++ Lines.

A>игра работает, но не эффективно реализуется перерисовка поля — в OnDraw() класса CLinesView — каждый раз осуществляется полная перерисовка. как сделать это наиболее правильно?

A>CRaster — класс рисования

A>CBall — класс шарик, рисует шарик,активный шарик, шарик при удалении
A>CField — класс поля игры, при прорисовки вызывает 81(поле 9 на 9) раз функцию CBall::Draw(CDC *pDC)
A>CLinesView — в OnDraw вызывает field.Draw();

A>наверное, было бы правильно всякий раз перерисовывать не всё поле, а только 2 клеки — результат движения шарика, слышала про использование буффера для более быстрой работы, но как это сделать — не понимаю. подскажите.


ИМХО лучше сделать игровое поле в виде CBitmap и чтоб шарики туда себя рисовали... а уже этот
bitmap bitblit-ом перекидывать... Вот тут много всякого для работы с Bitmaps: http://www.codeproject.com/bitmap/
Re: перерисовка поля игры Lines
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 22.11.04 07:31
Оценка:
Здравствуйте, anais, Вы писали:

A>наверное, было бы правильно всякий раз перерисовывать не всё поле, а только 2 клеки — результат движения шарика,

Совершенно верно.

слышала про использование буффера для более быстрой работы, но как это сделать — не понимаю. подскажите.

Flicker Free Drawing In MFC
- Искренне ваш, Поросенок Пафнутий
Re[2]: перерисовка поля игры Lines
От: anais  
Дата: 22.11.04 07:58
Оценка:
A>ИМХО лучше сделать игровое поле в виде CBitmap и чтоб шарики туда себя рисовали... а уже этот
A>bitmap bitblit-ом перекидывать... Вот тут много всякого для работы с Bitmaps: http://www.codeproject.com/bitmap/

я англ. не знаю. не могли бы Вы объяснить?

я создаю класс CBitmap — основа которого картинка 9 на 9, CBall просто шарик. где лучше всего осуществлять перерисовку, если не в CLinesView::onDraw()?
Re[2]: перерисовка поля игры Lines
От: Аноним  
Дата: 22.11.04 07:59
Оценка:
Здравствуйте, SchweinDeBurg, Вы писали:

SDB>Здравствуйте, anais, Вы писали:


A>>наверное, было бы правильно всякий раз перерисовывать не всё поле, а только 2 клеки — результат движения шарика,

SDB>Совершенно верно.

SDB>слышала про использование буффера для более быстрой работы, но как это сделать — не понимаю. подскажите.


На игровом поле надо нарисовать много объектов. Если их рисовать прямо на экран,
то будет видно, в каком порядке они перерисовываются. Если же все сперва нарисовать
в битмап, а потом, кокда все в него прорисуется, нарисовать его на экране, таких глюков
не будет. Поле будет рисоваться на экране только тогда, когда все изменения произведены.

можно показать так:

// сперва рисуем в битмап
bitmap->Draw(...);
bitmap->Draw(...);

.....

bitmap->Draw(...);
bitmap->Draw(...);

// а потом этот битмап на экран

screen->Draw(bitmap);
Re[3]: перерисовка поля игры Lines
От: aka50 Россия  
Дата: 22.11.04 08:57
Оценка:
Здравствуйте, anais, Вы писали:

A>>ИМХО лучше сделать игровое поле в виде CBitmap и чтоб шарики туда себя рисовали... а уже этот

A>>bitmap bitblit-ом перекидывать... Вот тут много всякого для работы с Bitmaps: http://www.codeproject.com/bitmap/

A>я англ. не знаю. не могли бы Вы объяснить?


A>я создаю класс CBitmap — основа которого картинка 9 на 9, CBall просто шарик. где лучше всего осуществлять перерисовку, если не в CLinesView::onDraw()?


Все правильно... прорисовку можно именно в CLinesView::OnDraw() делать... надо деалать как сказано тут http://www.rsdn.ru/Forum/?mid=909318&flat=0
Автор:
Дата: 22.11.04
Re[3]: перерисовка поля игры Lines
От: Аноним  
Дата: 22.11.04 11:43
Оценка:
А еще лучше если за рисование поля и анимацию шарика будут отвечать
разные классы. Т.е. можно создать какой-нибудь контрол (например кнопку или
еще чего), в который надо будет нарисовать шарик и передвигать по экрану
этот контрол. Т.о. недействительным регионом поля будет тот регион, который
находился под контролом и "вышел из под него" в резельтате движения этого
контрола.

В Symbian OS спещиально для этого есть класс RWsSprite или что-то похожее.
В общем в винде надо поискать что-нибудь по поводу спрайтов.
Re[4]: перерисовка поля игры Lines
От: anais  
Дата: 22.11.04 12:40
Оценка:
Здравствуйте, Аноним,
есть ли у Вас похожий исходник чтобы разобрать рисование.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.