Главная страница
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.013 c
14-17351
msoftware
2003-02-18 11:17
2003.03.06
Очень маленький и глупый вопрос


14-17316
gsu
2003-02-17 09:42
2003.03.06
Футбол, хоккей, кегли, ...


6-17240
dj VoV
2003-01-13 21:24
2003.03.06
Удаленное редактирование реестра


14-17372
orion_st
2003-02-18 14:55
2003.03.06
Get only Date from TMonthCalendar


14-17349
Gerakl
2003-02-17 19:40
2003.03.06
VisualBasic