Главная страница
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.025 c
14-17303
Фикус
2003-02-20 08:06
2003.03.06
Прикольно :)


1-17186
Николай Быков
2003-02-24 12:02
2003.03.06
как можно быстрее сделать?


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


1-17148
IVANOV
2003-02-22 08:15
2003.03.06
Вопрос о создании TStrings


14-17394
Дмитрий К.К.
2003-02-19 06:12
2003.03.06
Именинники 19 февраля