2012-12-17 11 views
18

अगर मैं सही ढंग से समझ, LibGDX addActions पद्धति के उपयोग के साथ एक छवि घूर्णन है:मध्य बिंदु से libgdx में एक छवि अभिनेता को घुमाने के लिए कैसे?

this.addAction(parallel(rotateBy(360, 0.5f), moveTo(320, 100, 0.5f))); 

बात है, यह बिंदु = (0,0) छवि के तक घुमाया जा रहा है।

वहाँ है के लिए एक रास्ता केंद्र बिंदु वस्तु की द्वारा एक छवि बारी बारी से:

यहाँ मेरे सवाल है? इसे बीच में पिन करने और फिर कार में एक पहिया की तरह मोड़ने की तरह कुछ? दोनों rotateBy और rotateTo तरीकों (0,0) छवि को ही की बात से बदल जाता है।

उत्तर

29

आपको अपने अभिनेता की "मूल" को सही ढंग से सेट करना होगा। आप अभिनेता एपीआई से पढ़ सकते हैं कि मूल स्थिति के सापेक्ष है और इसका उपयोग स्केल और रोटेशन के लिए किया जाता है।

तो, अपने मध्य बिंदु की गणना करें, और मूल बिंदु को मूल बिंदु पर सेट करें।

Actor a; 
.... 
a.setOrigin(a.getWidth()/2, a.getHeight()/2); 
+0

यह सबसे आसान समाधान था। मैं सिर्फ रोल_onto_स्क्रीन() विधि में अभिनेता के अंदर मूल स्थापित कर रहा हूं। धन्यवाद दोस्तों! –

+0

क्या होगा यदि मुझे लगातार अभिनेता या समूह को घुमाएं? – ManishSB

+0

आप बस घुमाए गए क्रिया को दोहराए गए क्रिया में लपेटें, और दोहराना एक्शन को एक्टर्स एक्शन के रूप में सेट करें। – Kedu

3

ऑब्जेक्ट का अनुवाद करना सबसे आसान तरीका है ताकि 0,0 बिंदु केंद्र हो, इसे घुमाएं, फिर इसे स्थिति में वापस अनुवाद करें। मैं libGDX से परिचित नहीं हूं, लेकिन तीन परिवर्तनों को एकत्रित करने के लिए एक विधि होनी चाहिए, जिसका अर्थ है कि आप केवल अपने ऑब्जेक्ट में एक समेकित परिवर्तन लागू करते हैं। ध्यान में रखें कि आप परिवर्तन को जोड़ते हैं, एक फर्क पड़ता है।

एक और अधिक जटिल तरीका जो वास्तव में एक ही परिणाम देता है, घुमाव द्वारा बनाए गए ऑफसेट की मात्रा की गणना करना और छवि को मूल रूप से वापस अनुवाद करना शामिल है। इस तरह से मत करो। तीन सरल परिवर्तनों का संयोजन करना रास्ता है और परिवर्तनों का उपयोग करने के सर्वोत्तम कारणों में से एक है।

** संपादित करें API पर देखकर अभिनेता ऑब्जेक्ट में अनुवाद() विधि है। अपनी छवि को स्थानांतरित करने के लिए इसका उपयोग करें ताकि 0,0 बिंदु केंद्र में हो। Psuedocode में;

x = this.getX(); 
y = this.getY(); 
cx = this.getWidth() * .5; 
cy = this.getHeight() * .5; 
this.translate(-(x+cx), -(y+cy)); // move so 0,0 is the centre of the Actor object 
this.rotate(thisMuch); // rotate the Actor 
this.translate((x+cx), (y+cy)); // move it back to its original location 

इसके परिणामस्वरूप आपकी वस्तु स्पॉट पर अपने केंद्र बिंदु पर घूमती है। यह दृढ़ दिखता है, लेकिन अभ्यास में यह बहुत ही कुशल है, इसलिए यदि आप मैट्रिस (ट्रांसफॉर्म) के साथ सीधे काम करने में सक्षम हैं जो इन तरीकों को चलाएंगे।

+0

चाल (320, 100, 0.5 एफ) विधि को छवि पर बिंदु x = 320 y = 100 पर स्थानांतरित करने के लिए उपयोग किया जाता है। मुझे नहीं लगता कि मैं समझता हूं कि मैं ऑब्जेक्ट का अनुवाद कैसे करूं **। –

+0

दिमाग में असर, यह libGDX पर मेरा पहला रूप है :-) मैं ऊपर अपना जवाब संशोधित कर रहा हूं। –

3

यहां एक आसान तरीका है कि आप libgdx में एक अभिनेता को कैसे घुमा सकते हैं।,

img.setorigin(width/2,hieght/2); 

अब आप दक्षिणावर्त और घड़ी की विपरीत घुमा सकते हैं अपनी जरूरत के अनुसार:

सबसे पहले, आप मूल निर्धारित करने की आवश्यकता

img.rotate(2f); 

या

img.rotate(-2f); 
2

सबसे आसान और उत्पत्ति को स्थापित करने के लिए मैंने पाया सबसे छोटा रास्ता कॉल करना है:

Actor a; 

... 

a.setOrigin(Align.center); 
संबंधित मुद्दे