Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Спрайты и канва [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...


Наверх

Титульная страница Поиск, карта сайта Написать письмо