![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Спрайты и канва [Delphi, Windows]
_Дельфин_ © (2004-09-10 20:30:00)Во многих статьях по созданию спрайтов в играх в конце я читал о том, что спрайты выводятся на канву. Но ведь она весьма неустойчива, - например, если сверху появилось другое окно, то изображение стирается. А если у меня так происходит часто и к тому же много спрайтов - не перерисовывать же постоянно целый экран?! Или я чего-то не понимаю? Объясните, пожалуйста, как тут быть и заодно объясните, как избавиться от мелькания изображения при перерисовке
(2004-09-14 08:57:00) [1]Удалено модератором
Megabyte-Ceercop (2004-09-13 07:07:00) [2]
> > _Дельфин_
Верь мне. Реально. :-|
> _бобомен
Верь мне. Реально. :-|
(2004-09-13 06:52:00) [3]Удалено модератором
Megabyte-Ceercop (2004-09-13 06:18:00) [4]
> _Дельфин_
Смотри:
Чтобы изображение не терялось после того, как над твоим окном побывало другое окно, перерисовывай весь экран по событию формы GetFocus. Это восстановит картинку, и не загрузит основной процесс.
Для исчезновения предыдущего движения, перерисовывай участок уровня в том месте, где был твой герой в предыдущем кадре (это не так ресурсоемко), затем перерисовывай части уровня, где вообще были какие-либо подвижные спрайты, затем выводи все спрайты по новым координатам. (Если уровинь просто одного цвета, то заливай участки экрана соотв цветом).
Для канваса вообще, смотри пример в Delphi tutorials (это папка в директории где стоит дельфи) там есть примет EarthPong.
А насчет узучай OpenGL или DirectX - мой тебе совет: DirectX - only and forever!!!
XProger (2004-09-11 23:02:00) [5]Очищай bmp.Canvas. FillRect'ом или ещё как-нить... А затем рисуй всё заново!
_Дельфин_ (2004-09-11 22:31:00) [6]А как тогда тут быть? Я вот вывожу спрайт(героя) на участок поверхности. Как мне сделать, чтобы когда надо будет герою сделать движение, т. е. новое положение отрисовать, старое исчезло? Если я, может, не корректно объяснил - чтобы рисунки не накладывались один на один?
DeadMeat (2004-09-11 11:51:00) [7]Нет это TForm
---
...Death Is Only The Begining...
XProger (2004-09-11 00:50:00) [8]Это где такое? KOL?
kastik (2004-09-10 23:33:00) [9]А можно еще свойству doublebuffered присвоить true. И не будет ничего мерцать.
XProger (2004-09-10 20:41:00) [10]
var
Page : TBitmap;
...
//в инициализации
Page := TBitmap.Create;
// Затем рисуешь всё на Page.Canvas
// после отрисовки всего что хотел пишешь...
Canvas.Draw(0, 0, Page);
И никаких мерцаний не будет, это называется двойная буферация (практически :). Т.е. изображение создаётся в памяти, а затем одним махом выводится на канву.
P.S.
После того, как наиграешься с канвой - начинай изучение OpenGL или DirectX...