Slick2D змена хуткасці гульні

Я стварыў гульню, выкарыстоўваючы Арэлі, і гэта было трохі ненадзейным, таму я пачаў перарабляць яго, выкарыстоўваючы Slick2D гульнявога рухавічка і я сутыкнуўся з праблемамі.

Фон з гульнявых ролікаў па экране пры некаторым аб пікселях кожны раз, калі метад абнаўлення выклікаюцца. Гэта дазваляе паскорыць і запаволіць, так што фон будзе рухацца вельмі хутка, а затым вельмі павольна, і працягвае вагацца.

Я паспрабаваў * дэльтай (які кантралюе частату абнаўлення, я думаю!) На маёй кошту, якая рухаецца на заднім плане, але так як гэта звычай даваць мне дакладнае значэнне можна выкарыстоўваць для скіду фону на левай баку (2 фон ход справа налева. левай рукой адзін сыходзіць направа на -800 пікселяў).

Што з'яўляецца прычынай гэтага і як яго пераадолець?

дзякуй

1
што аб базаванні фонавага руху па сістэмных гадзін?
дададзена аўтар Hovercraft Full Of Eels, крыніца

1 адказы

Вось некаторыя чытання для вас (ёсць Gamedev канкрэтнага StackExchange сайт , ДАРЭЧЫ):

Адным з найбольш важных момантаў у гэтых артыкулах з'яўляецца тое, што ўсё рухаецца з пэўнай хуткасцю з цягам часу, а не на працягу пэўнага колькасці кадраў. Паколькі частата кадраў можа непрадказальна змяняцца, у залежнасці ад часу і руху кадраў на аснове ня заводзіцца быць эквівалентныя адзін аднаму.

<Моцны> І вось нейкае тлумачэнне ...

Такім чынам, ваш кампутар і АС з'яўляюцца шматструменныя, і, такім чынам, вы ніколі не можаце ведаць, што адбываецца за межамі вашага прыкладання, а таксама тое, што агульная нагрузка на машыну. З-за гэтага, нават калі вы знаходзіцеся ў поўнаэкранным рэжыме вы не атрымліваеце эксклюзіўны доступ да працэсара. Такім чынам, гэта адзін фактар, чаму рэчы паскорыць і запаволіць.

Мэта дэльты ў Slick2D, каб дазволіць вам справіцца з гэтай хуткасцю да/запавольвацца, і дазволіць вашаму з дадаткам змяняць частату кадраў дынамічна, так што <моцны> ўспрымаліся рух на экране не змяняецца з-за нагрузка на вашай машыне. Дэльта <моцны> не манітор частата абнаўлення (які з'яўляецца сталым); дэльта з'яўляецца колькасць мілісекунд, якія прайшлі з моманту апошняга выкліку абнаўленне .

So how do you use this delta properly? Let's say your background is supposed to move at a rate of 100px/sec. If the delta (on a given call to update) is 33 milliseconds, then the amount you should move your background on this update is 100*(33/1000.0) = 0.033 - so you would move your background by 0.033 pixels. This might seem weird, and you may wonder what the point is of moving <1 pixel, but stick with me.

Па-першае, прычына, вы павінны падзяліць яго на 1000,0 замест 1000, таму што вы <моцны> хочаце рух дэльты, каб даць вам лік з якая плавае кропкай.

Вы заўважыце, што 2D-графікі матэрыял у Slick2D выкарыстоўваюцца значэння з якая плавае кропкай для адсочвання размяшчэння рэчаў. Гэта таму, што калі трохкутнік кажа вам, каб перамясціць што-то ад 0,033 пікселяў, вам трэба перамясціць яго 0,033: ня 0, а не 1 пікселяў. Рух Субпиксельного мае вырашальнае значэнне для згладжвання павелічэння/памяншэння частоты кадраў, а таксама, таму што кумулятыўны эфект на працягу некалькіх рухаў подпиксельных з'яўляецца тое, што, калі момант з'яўляецца правільным, усе гэтымі маленькімі руху складаюцца ў піксель, гэта зусім гладкае, што прыводзіць да правільнай хуткасці руху ў цэлым.

Вы можаце думаць, што, паколькі экран ліквідуе выявы ў дадзеным Піксэл, а не подпиксельные элементы, што гэта не мае значэння, калі вы робіце Субпиксельную рух, але калі вы канвертаваць ўсю вашу адсочванні руху ў паплаўкі, вы будзеце бачыць, што вы назіраеце эфект у значнай ступені сыходзіць.

11
дададзена
Выбачайце за дрэнную граматыку на арыгінальным адказ. Я ачысьціў яго даволі шмат.
дададзена аўтар jefflunt, крыніца
Я не магу цябе аддзячыць за гэтую інфармацыю! Вельмі лёгка зразумець. І я не заўважыў якіх-небудзь граматычных памылак, так што не хвалюйцеся! І калі я сказаў, частата абнаўлення, я меў на ўвазе, калі Update() Апошняе называецца, я проста не ведаю, як выказаць гэта. Дзякуючы мільёна людзей.
дададзена аўтар TomRichardson, крыніца