Помощ - Търсене - Потребители - Събития
Пълна версия: независимо от лага поддържайте скоростта еднаква!
Българското Game Maker общество [Само за четене / Архив] > Работа с Game Maker > Ръководства и Примери
яверт
Нито концепцията, нито кода са мои, но това е нещо твърде полезно да бъде подминато.
С две думи чрез този метод нещата ще се движат с еднаква скорост независимо от лага.... винаги!
И е изключително прост, всеки може да го приложи. Какво трябва да се направи:
1.В първата стая на играта, в контрол обекта при създаването му се инициализира една глобална променлива global.gamespeed=1;
2.После тази променлива трябва да се обновява всяка стъпка в begin step на контрола за съответната стая:
Код
if fps>1
   {
   global.gamespeed=fps/room_speed;
   }

3.За всяко нещо, което се движи, или се променя постоянно, се разделя на тази глобална променлива, за да се поддържа тази скорост:
Код
//това са само примери
speed=10/global.gamespeed;
friction=0.5/global.gamespeed;
image_speed=2/global.gamespeed;//изключително важно, за да изглежда и анимацията наред
//ако нещо се увеличава всяка стъпка, то това правило важи и за него
health+=3/global.gamespeed;
edikvositam+=10/global.gamespeed;

И това е само. Толкова просто.
Има едно изключение и това са алармите. Те не могат да бъдат повлияни от този метод. За това може да се използва тяхната алтернатива в код.
Delta timinga не е оправдание да занемарите играта да бъде неоптимизирана да се влачи с едва 20 кадъра в секунда. Ще стане насечена и определено неприятна за игра. Този метод е само за случаите когато някой има по-стар компютър, или има лаг поради многото пуснати програми.
Hella_from_Hell
Добре де ама ако всичко се влияе от тази променлива няма ли играта да сече умишлено?
В смисъл то движението хубаво ще се запази едно и също, но така форсираш играта ти да бави повече като процеси.
яверт
Не мога да те разбера какво имаш впредвид. Очевидно метода е достатъчно добър, щом се използва широко.
форираш? Какъв е този глагол? Аман от чужди думи.
Hella_from_Hell
Форсираш имах в предвид. Много ми се яде и ям букви днес.

Мисълта ми беше че като го слагаш това на всяка променлива играта ти ще стане по-"тежка". Таймингът ще си остане същият, но предполагам ще се появи допълнителен FPS лаг. Друг е въпросът колко голям ще е той. Може и да е почти нищожен, но влияние определено ще оказва някакво.
яверт
Не, не се насилва играта по този начин.
Цитат
но влияние определено ще оказва някакво.

Видиш ли, това ще се отрази върху скоростта:
Код
var a;
if fps>1 global.gamespeed=fps/roomspeed;
repeat(200) a=5/global.gamespeed;

Ако някой не вярва, че това ще му смъкне скоростта с поне 5 кадъра в секунда, може да го пробва.
Angel
Еми реших да го пробвам,и резултата е кофти unsure.gif ,установих откъде е проблема, и тои е че GM fps-то се ъпдейтва на една секунда и това прави голям проблем,но намерих едно dll което изчислява фпс-то до 0,000001 секунди и всичко е ок с него smile.gif ето го тук
svetljjjo
някой има ли го тоя длл че от рапит шаре са го махнали вече
ако някой го има да го качи някъде да може да се сваля
Това е "lo-fi" версия на нашия форум. За да видите пълната версия, моля натиснете тук.
Invision Power Board © 2001-2024 Invision Power Services, Inc.