खेल में वस्तुओं को libGDX में दी गई गति के साथ स्थानांतरित करने का सही तरीका क्या है? उदा. मेरे पास स्क्रीन के नीचे एक सर्कल है और मैं इसे 10 पिक्सल प्रति सेकेंड की गति के साथ शीर्ष पर ले जाना चाहता हूं। सभी फोन में अलग-अलग गति होती है इसलिए हर फोन पर रेंडर फंक्शन का डेल्टा समय अलग होता है तो मैं इसे कैसे कर सकता हूं?

0
Uknowledge_1 28 जिंदा 2020, 23:39

2 जवाब

सबसे बढ़िया उत्तर

मुझे यकीन नहीं है कि आपका इससे क्या मतलब है:

सभी फोन की गति अलग-अलग होती है इसलिए हर फोन पर रेंडर फंक्शन का डेल्टा समय अलग होता है...

लेकिन मुझे लगता है कि प्रतिपादन प्रक्रिया में डेल्टा मान के बारे में आपकी समझ गलत है। जैसा कि आप शायद पहले से ही जानते हैं, रेंडर विधि को प्रति सेकंड कई बार कहा जाता है, और प्रत्येक समाप्त कॉल के बाद रेंडर विधि स्क्रीन को अपडेट किया जाता है। कितनी बार रेंडर विधि को कॉल किया जाता है Gdx.graphics.getFramesPerSecond() को चेक करके पाया जा सकता है। तो डेल्टा मान का उद्देश्य क्या है? डेल्टा सेकंड में वर्तमान फ्रेम (यह रेंडर कॉल) और आखिरी फ्रेम (वर्तमान से ठीक पहले कॉल रेंडर) के बीच का समय है।

भौतिकी से हम जानते हैं कि distance = velocity * time

तो, वस्तु को 10 इकाइयों प्रति 1 सेकंड की दूरी से स्थानांतरित करने के लिए (इकाई पिक्सेल, मीटर, आदि हो सकती है ... - यह वास्तव में आपके कैमरे और विश्व प्रतिपादन तर्क पर निर्भर करता है), हमें वर्तमान फ्रेम के लिए सही यात्रा दूरी की गणना करनी होगी . हम वेग और बीता हुआ समय (डेल्टा) जानते हैं। हम इस तरह अगली स्थिति की गणना कर सकते हैं

public void render(float delta) {
    float velocity = 10.0f; // actually 10.0units / 1s
    position = position + velocity * delta; // position can be circle.y to travel up
}
2
rcwnd_cz 29 जिंदा 2020, 01:33

आप libGDX विधि से डेल्टा समय निर्धारित कर सकते हैं:

world.step(Gdx.graphics.getDeltaTime());

render() विधि के अंत में। यह libGDX को FPS प्रबंधित करने की अनुमति देता है।

वस्तुओं की गति को अपनी इच्छानुसार अनुकूलित करने के लिए आप पिक्सेल प्रति मीटर कारक का उपयोग कर सकते हैं: http://seanballais.github.io/blog/box2d-and-the-pixel-per-meter-ratio/

1
PHP Avenger 7 फरवरी 2020, 08:36