Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.09;
Скачать: CL | DM;

Вниз

Спрайты и канва   Найти похожие ветки 

 
_Дельфин_   (2004-09-10 20:30) [0]

Во многих статьях по созданию спрайтов в играх в конце я читал о том, что спрайты выводятся на канву. Но ведь она весьма неустойчива, - например, если сверху появилось другое окно, то изображение стирается. А если у меня так происходит часто и к тому же много спрайтов - не перерисовывать же постоянно целый экран?! Или я чего-то не понимаю? Объясните, пожалуйста, как тут быть и заодно объясните, как избавиться от мелькания изображения при перерисовке


 
XProger ©   (2004-09-10 20:41) [1]


var
Page : TBitmap;
...
//в инициализации
Page := TBitmap.Create;
// Затем рисуешь всё на Page.Canvas
// после отрисовки всего что хотел пишешь...
Canvas.Draw(0, 0, Page);


И никаких мерцаний не будет, это называется двойная буферация (практически :). Т.е. изображение создаётся в памяти, а затем одним махом выводится на канву.

P.S.
После того, как наиграешься с канвой - начинай изучение OpenGL или DirectX...


 
kastik   (2004-09-10 23:33) [2]

А можно еще свойству doublebuffered присвоить true. И не будет ничего мерцать.


 
XProger ©   (2004-09-11 00:50) [3]

Это где такое? KOL?


 
DeadMeat ©   (2004-09-11 11:51) [4]

Нет это TForm

---
...Death Is Only The Begining...


 
_Дельфин_   (2004-09-11 22:31) [5]

А как тогда тут быть? Я вот вывожу спрайт(героя) на участок поверхности. Как мне сделать, чтобы когда надо будет герою сделать движение, т. е. новое положение отрисовать, старое исчезло? Если я, может, не корректно объяснил - чтобы рисунки не накладывались один на один?


 
XProger ©   (2004-09-11 23:02) [6]

Очищай bmp.Canvas. FillRect"ом или ещё как-нить... А затем рисуй всё заново!


 
Megabyte-Ceercop ©   (2004-09-13 06:18) [7]


> _Дельфин_

Смотри:
Чтобы изображение не терялось после того, как над твоим окном побывало другое окно, перерисовывай весь экран по событию формы GetFocus. Это восстановит картинку, и не загрузит основной процесс.

Для исчезновения предыдущего движения, перерисовывай участок уровня в том месте, где был твой герой в предыдущем кадре (это не так ресурсоемко), затем перерисовывай части уровня, где вообще были какие-либо подвижные спрайты, затем выводи все спрайты по новым координатам. (Если уровинь просто одного цвета, то заливай участки экрана соотв цветом).
Для канваса вообще, смотри пример в Delphi tutorials (это папка в директории где стоит дельфи) там есть примет EarthPong.

А насчет узучай OpenGL или DirectX - мой тебе совет: DirectX - only and forever!!!


 
имя   (2004-09-13 06:52) [8]

Удалено модератором


 
Megabyte-Ceercop ©   (2004-09-13 07:07) [9]


> > _Дельфин_

Верь мне. Реально. :-|


> _бобомен

Верь мне. Реально. :-|


 
имя   (2004-09-14 08:57) [10]

Удалено модератором



Страницы: 1 вся ветка

Текущий архив: 2005.01.09;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.031 c
1-1103648451
Dan
2004-12-21 20:00
2005.01.09
Как отловить событие перемещения формы.


4-1100809345
Apophis
2004-11-18 23:22
2005.01.09
Обновление списка оборудования ОС


6-1098334391
_Maniac_
2004-10-21 08:53
2005.01.09
Каскад прокси


14-1103510809
Думкин
2004-12-20 05:46
2005.01.09
С днем рождения! 20 декабря


1-1103811959
Adoon
2004-12-23 17:25
2005.01.09
Как определить версию Excel (97 или 2000) и язык