пишу игру на 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++. Прикладные вопросы' — Павел Кузнецов
Здравствуйте, 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/
Здравствуйте, anais, Вы писали:
A>наверное, было бы правильно всякий раз перерисовывать не всё поле, а только 2 клеки — результат движения шарика,
Совершенно верно.
слышала про использование буффера для более быстрой работы, но как это сделать — не понимаю. подскажите.
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(...);
Здравствуйте, anais, Вы писали:
A>>ИМХО лучше сделать игровое поле в виде CBitmap и чтоб шарики туда себя рисовали... а уже этот A>>bitmap bitblit-ом перекидывать... Вот тут много всякого для работы с Bitmaps: http://www.codeproject.com/bitmap/
A>я англ. не знаю. не могли бы Вы объяснить?
A>я создаю класс CBitmap — основа которого картинка 9 на 9, CBall просто шарик. где лучше всего осуществлять перерисовку, если не в CLinesView::onDraw()?
А еще лучше если за рисование поля и анимацию шарика будут отвечать
разные классы. Т.е. можно создать какой-нибудь контрол (например кнопку или
еще чего), в который надо будет нарисовать шарик и передвигать по экрану
этот контрол. Т.о. недействительным регионом поля будет тот регион, который
находился под контролом и "вышел из под него" в резельтате движения этого
контрола.
В Symbian OS спещиально для этого есть класс RWsSprite или что-то похожее.
В общем в винде надо поискать что-нибудь по поводу спрайтов.