Форум: "Игры";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];
ВнизВопрос про LagCount Найти похожие ветки
← →
Anybody (2004-10-03 01:27) [0]Значит такое дело...
Рассмотрим на примере DelphiX:
Если спрайт движется с постоянной скоростью, то при каждом DoMove координата X=X+MoveCount*Speed
А что делать если необходимо организвать движение с ускорением ?
Если сделать так в DoMove:
x=x+Speed
Speed=Speed+MoveCount
То работать будет неправильно, т.е. при разных MoveCount x будет расти по-разному.
Собсно, вопрос в том, как сделать это правильно ???
← →
cyborg © (2004-10-03 09:41) [1]Speed сделай тип Single например. При нарастании скорости увеличивай его до определённого значения.
Что-то типа:
Speed:=2.5;
X:=Trunc(X+Speed);
← →
ninja (2004-10-03 11:15) [2]x=x+Speed
Speed=Speed+MoveCount
То работать будет неправильно, т.е. при разных MoveCount x будет расти по-разному.
а по-моему, это очень даже правильно. При разном ускорении ИХМО скорость должна нарастать по-разному. :)
Извените, если неправильно вас понял.
← →
Anybody (2004-10-03 13:24) [3]Мне тоже казалось, что так правильно, но вот контрпример:
1-й случай LagCount=100, один тик:
Speed=Speed+100
X=X+Speed
Т.е. X увеличился на Speed+100
2-й случай LagCount=50, два тика:
Т.е. более бытрый комп успевает сделать за то же время два DoMove и LagCount соответственно уменьшается в 2 раза
Speed=Speed+50
X=X+Speed
Speed=Speed+50
X=X+Speed
Итог: X увеличился на 2Speed+100, т.е. что совсем не так как в 1-м случае.
← →
Falcon(TFSoft) (2004-10-03 18:06) [4]Мне кажется, что если необходимо ускорение, то правелнее было б изменять х не линейно (тоесть х=х+dx) а квадратично (x=x+dx*dx, dx=dx+0.1).
А вот LagCount помоему вообще служит для того, что б вне зависимости от FPS(другими словами скорости компа, ведь правильно?) поддерживать видимость равномерного перемещения.
Тоесть пользуясь примером Anybody можно сказать, что на 2-х разных компах, при формуле скорости X=X+Speed*LagCount спрайт переместится за одно и то же время на оддинаковое расстояние. Только один сделает это за 2 шага, а второй за 6.
Вот так я думаю... Если не прав, то поправте пожайлуста.
А по поводу ускоренного перемещения, то я думаю реализовывать необходимо приблизительно вот так:
dx : Single;
MinSpeed : Single;//минимальная скорость...
MaxSpeed : Single;//...
***
//в зависимости от ускорения/замедления
dx := dx*0.1 //линейное ускорение
dx := dx*dx*0.1 //квадратическое ускорение, н/п гравитация
if (dx>MaxSpeed) then dx := MaxSpeed;
x := x + (dx+MinSpeed)*LagCount;
На мой взгляд этот вариант даст одинаковый вид ускорения на разноскоростных компах...
← →
NikeOLD © (2004-10-03 19:27) [5]FPS - это всего лишь отражение скорости игры. Этот показатель не может служить измерением скорости, другими словами, нельзя перемещать спрайт в зависимости от FPS.
Я неоднократно отмечал на этом форуме, что скорость игры на DirectDraw (в т.ч. DelphiX, как оболочке низкоуровневых методов DirectDraw) должна равняться 30 FPS.
Если делать привязку к FPS, то на медленных компьютерах будет заметно "торможение", а на быстрых - ускорение. И то и другое не приемлемо в компьютерных играх.
← →
ninja © (2004-10-03 20:16) [6]А почему не 24(или скока уж там для глаза) человеческава?
← →
cyborg © (2004-10-04 09:45) [7]33 в самый раз ;)
← →
Anybody (2004-10-04 10:33) [8]Видимо меня мало кто понимает на этом форуме. =))) Единственный дельный совет дал Falcon, за это ему спасибо.
Я вроде разобрался - изменение скорости не должно зависеть от LagCount"а, а просто ч/з некторый промежуток времени.
Блин ! Ну причем тут FPS !!!!!!!!!
Мы говорим про LagCount, кто-нить ваще знает что это такое ??????? =)))
← →
NikeOLD © (2004-10-04 10:35) [9]
> Блин ! Ну причем тут FPS !!!!!!!!!
FPS служит для измерения скорости игры, в основном - анимации.
Я на DelphiX не работаю, так что извиняй. Читай справку.
← →
Anybody (2004-10-04 10:38) [10]Вообще если говорить про ФПС, то они для человека абсолютно бесполезны, т.к. всю роль играет верт. частота монитора. Если уж так говорить, то идеально одинаковой скорости на двух компах получить невозможно. Можно только их более-менее приравнять.
← →
NailMan © (2004-10-04 12:58) [11]Anybody
> Вообще если говорить про ФПС, то они для человека абсолютно
> бесполезны, т.к. всю роль играет верт. частота монитора.
А если у пользователя VSync как класс в дровах вырублен?
> Если уж так говорить, то идеально одинаковой скорости на
> двух компах получить невозможно. Можно только их более-менее
> приравнять.
Если пользовать высокоточные таймеры(QueryPerfonamceCounter), то скорость процесса(продолжительность действия, расстояние передвижения и т.д.) может на очень разных по производительности компах быть одинакова. Естественно использовать коэфициенты поравки(масштабирование процесса по скорости компа).
---
WBR, NailMan aka 2:5020/3337.13
← →
Megabyte-CeerCop © (2004-10-04 13:02) [12]выражаясь правильно LagCount - это величина обратная FPS и равна она 1 / FPS.
Для ускорения объекта до определенной скорости нужно делать так:
X,Y - координаты объекта
XSpeed - скорость объекта по оси X
YSpeed - скорость по оси Y
TargetXSpeed, TargetYSpeed - скорость объекта которую нужно набрать
X = X + XSpeed; //Применение скорости к координатам объекта
Y = Y + YSpeed; //если скорость нулевая, то объект никуда не сдвигается.
If XSpeed > TargetXSpeed then XSpeed = XSpeed + 0.5; //ускоряет объект по оси X если текущая его скорость ниже целевой скорости.
...
//(0.5 - "это ускорение которое всегда одинаковое)
//Так нужно наростить обе координаты в двух направлениях.
Для ускорения свободного падения нужно делать
YSpeed = YSpeed + 1; //Постоянно ускоряет вниз
Для отскока от пола:
YSpeed = -YSpeed; //скорость меняется на противоположную
И т.д и т.д...
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.186 c