2012-11-05 66 views
19

मैं लिबजीडीएक्स (जावा) के साथ एक गेम बना रहा हूं।एक चिकनी कैमरा कैसे एल्गोरिदम का पालन करें?

मुझे कैमरे को तेजी से चलने वाले चरित्र का पालन करने की आवश्यकता है।

this.getCamera().position.set(obj.x, obj.y, 0); 

लेकिन, इस अधिक आसान बनाने के लिए किसी भी एल्गोरिथ्म है: सबसे आसान तरीका यह सिर्फ इस लिखना है करना है? जब कैमरा सख्त नहीं होता है, और हमेशा थोड़ा देर हो जाता है: चरित्र जल्दी ठीक हो जाता है, कैमरा थोड़ी देर के साथ आता है, या यदि आप अचानक कहीं दूर दिखाई देते हैं, तो कैमरे तुरंत टेलीपोर्ट नहीं करता है, लेकिन जब यह आपके लिए एक शीर्ष गति पर यात्रा करता है करीब आता है यह थोड़ा धीमा हो जाता है और आपको फिर से पाता है।

क्या कोई libgdx libs है जो ऐसा करता है या किसी को भी यह अनुभव है?

+0

"* लेकिन, इस अधिक आसान बनाने के लिए किसी भी एल्गोरिथ्म है? *" आप अपने दम पर किसी भी एल्गोरिदम की कोशिश की है, या किये गये किसी भी गूगल चिकनी कैमरा प्रक्षेप या कुछ और के लिए खोज करता? –

+1

मैंने इसे अपने आप करने की कोशिश की और कई कामकाजी उदाहरण हैं, लेकिन मुझे परिणाम बहुत पसंद नहीं है, मैं उत्सुक था कि कुछ ऐसा पहले से ही पता लगाया जा सकता है क्योंकि ऐसा लगता है कि किसी भी गेम देव की आवश्यकता होगी, Google खोज के संबंध में, मुझे यकीन नहीं है क्या खोजना है, यह कई अन्य सामान लाता है। –

उत्तर

6

ऑरेलियन रिबन के Java Universal Tween Engine पर एक नज़र डालें। यह इंटरपोलेशन करता है और इसमें कई आसान समीकरण होते हैं जो मुझे लगता है कि आप जो चाहते हैं उसे प्राप्त करेंगे। इसमें अन्य उन्नत विशेषताएं भी हैं जैसे कि अन्य रोचक प्रभावों के लिए कुछ तरीकों को एक साथ जोड़ना और चेन करना।

आपका गेम तर्क यह देखने के लिए जांच सकता है कि क्या चरित्र जल्दी से आगे बढ़ रहा है या स्थिति के मामले में एक कदम परिवर्तन है। इसके जवाब में, अपनी वर्तमान कैमरा स्थिति को ट्यून इंजन पर चालू करें और इसे ले जाने दें - आसानी से चरित्र की वर्तमान स्थिति पर ज़ूमिंग करें।

+0

बस रिकॉर्ड के लिए (मुझे एहसास हुआ कि यह थोड़ी देर पहले था) नहीं, आप इस के लिए ट्विन इंजन का उपयोग नहीं करना चाहेंगे क्योंकि खेल चरित्र हमेशा चल रहा है और उपयोगकर्ता नियंत्रित दिशात्मक परिवर्तनों के लिए प्रवण है। Tweens शुरू करने और मारने के ऊपरी हिस्से में कोई मतलब नहीं है। बस अद्यतन (डेल्टा) कॉल में उपरोक्त लर्प एल्गोरिदम का उपयोग करें। उस ने कहा कि यूटीई अन्य ऐसे संक्रमणों के लिए उत्कृष्ट है या यहां तक ​​कि मुख्य गेम चरित्र के अलावा अन्य चीज़ों के लिए कैमरा ले जाने के लिए भी उत्कृष्ट है। – RichieHH

+0

मैं असहमत हूं। जबकि मैंने एक समय विश्लेषण नहीं किया है, tweens पूल किया जाता है तो शुरू करने और हत्या का प्रभाव न्यूनतम होना चाहिए। एक नया ट्विन असाइन करना केवल असाइनमेंट का एक सेट है और एक ट्विन को मारना इसी तरह ऑब्जेक्ट को पूल पर वापस लौटा रहा है। मैंने इस दृष्टिकोण का उपयोग किसी भी गेम में सीधे देखने के लिए कैमरे की गति को सुगम बनाने में मदद करने के लिए किया है, जिसमें कोई प्रभावशाली प्रदर्शन प्रभाव नहीं है। मोरिंग मोशन के बजाए, कैमरा आलसी खिलाड़ी का पीछा करता है जो आंखों के लिए बहुत बेहतर दिखता है। – MutantXenu

40

दूरी के दसवें हिस्से की तरह कुछ आसान कोशिश करें। यह आश्चर्यजनक रूप से अच्छी तरह से काम करता है।

float lerp = 0.1f; 
Vector3 position = this.getCamera().position; 
position.x += (Obj.x - position.x) * lerp * deltaTime; 
position.y += (Obj.y - position.y) * lerp * deltaTime; 
+16

सुझाव: फ़्रेमेट से स्वतंत्र आंदोलन को मुक्त करने के लिए डेल्टा-टाइम के साथ भी गुणा करें। – Mortennobel