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

Вниз

Движение в DirectX.   Найти похожие ветки 

 
RavenD ©   (2002-10-04 21:12) [0]

Пожалуйста помогите.
В DirectX пытаюсь сделать движущийся шарик.Пересчёт коордигат производится с задержкой:
Time:=GetTickCount;

SetRect(rect, Pos0.X, Pos0.Y, Pos0.X+12, Pos0.Y+11);
hRet:=FDDSBack.BltFast(Pos0.X,Pos0.Y,FDDSPole,@rect,DDBLTFAST_WAIT);
if hRet=DDERR_SURFACELOST then begin
hRet:=RestoreALL;
if Failed(hRet) then Result:=hRet;
Exit
end;

if Time-TimeLast> задержка then begin
Проверка на ударение
Пересчёт координат
end;

TimeLast:=GetTickCount end;

hRet:=FDDSBack.BltFast(Pos.X,Pos.Y,FDDSTemp,@temp,DDBLTFAST_WAIT
or DDBLTFAST_SRCCOLORKEY);
if hRet=DDERR_SURFACELOST then begin
hRet:=RestoreALL;
if Failed(hRet) then Result:=hRet;
Exit
end;
Pos0:=Pos;
При воспроизведении мячик двигается как бы дёргаясь хаотично.При установлении нулевой задержки всё проходит плавно.Как это исправить?
Заранее спосибо.


 
Sapersky_   (2002-10-05 17:52) [1]

Возможно, так:
k:=(Time-TimeLast)/задержка; // задержка<>0 :)
Затем при пересчёте координат:
x:=x+dx*k;
То есть координаты желательно вычислять и хранить в Single и округлять только при выводе на экран (когда-то это было медленно, сейчас - без разницы).
Можно и
x:=x+Round(dx*k);
но тогда влияние k будет довольно "грубым".
Пересчитывать в данном случае можно через интервал "задержка"
(If k>=1 then begin...) или на каждом такте. В случае, если объект управляется пользователем, желателен 2-й вариант (управление получается "мягче").
Да, ещё вариант: можно попробовать в качестве функции для измерения времени QueryPerformanceCounter - она (вроде бы) точнее.



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

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

Наверх




Память: 0.47 MB
Время: 0.014 c
14-17310
MsGuns
2003-02-16 14:28
2003.03.06
Средняя школа


14-17291
SPeller
2003-02-11 19:47
2003.03.06
---|Ветка была без названия|---


1-16983
Nehto
2003-02-21 20:43
2003.03.06
Kompiljacija Proekta


3-16884
iusup
2003-02-17 20:57
2003.03.06
Не работает прога с *.mdb на другой машине


7-17414
Igor---
2003-01-08 13:09
2003.03.06
Клонирование дисков