का उपयोग करके छवि घड़ी की घुमाएं घुमाएं हम LibGDX का उपयोग करके छवि घड़ी को कैसे घुमा सकते हैं? जो मैं देख रहा हूं वह है कि जब कोई छवि लोड हो जाती है, तो एक स्टार मान लीजिए, मुझे स्क्रीन की शुरुआत से स्क्रीन को क्षैतिज रूप से स्क्रीन के अंत तक घूमने की ज़रूरत है, स्टार घूर्णन के साथ, मैं libgdx में ऐसा कैसे कर सकता हूं?LibGDX
LibGDX
उत्तर
जब आप अपने स्प्राइटबैच के साथ बनावट खींचते हैं, तो आप ड्रॉ फ़ंक्शंस में से एक का उपयोग कर सकते हैं जिसमें रोटेशन शामिल है। SpriteBatch
आप स्थिति और रोटेशन के लिए एक चर रख सकते हैं, और हर बार जब आप इसे बारी बारी से करने के लिए, जबकि क्षैतिज चलती प्रस्तुत करना स्थिति के रोटेशन और एक्स घटक वृद्धि: यह जावाडोक सभी ड्रा कार्य करती है।
आप सीन 2 डी क्रियाओं का भी उपयोग कर सकते हैं। मेरे यहां एक उदाहरण है जिसमें क्षुद्रग्रह-प्रकार की चीज स्क्रीन के नीचे गिर रही है और घूर्णन कर रही है। अपने बनाने पर
:
http://www.netthreads.co.uk/2012/02/09/libgdx-scene2d-demo-with-scene-transitions/
के बाद किसी भी स्प्राइट
batch.draw(sprite,(Gdx.graphics.getWidth() - sprite.getRegionWidth())/2.0f,(Gdx.graphics.getHeight() - sprite.getRegionHeight())/2.0f,sprite.getRegionWidth()/2.0f,sprite.getRegionHeight()/2.0f, sprite.getRegionWidth(), sprite.getRegionHeight(), 1f, 1f,count, false);
if(count < 0.0f)
count = 360.0f;
else
count --;
प्रारंभ में
private float count =360.0f;
के लिए काउंटर की स्थापना की आप इस तरह भी यह कर सकते हैं बारी बारी से करने कार्यान्वयन है विधि
sprite.setOrigin(sprite.getWitdh() /2f, sprite.getHeight() /2f);
sprite.setPosition(0, 200); //200 it's a example
अपने प्रस्तुत करना (नाव डेल्टा) पर
sprite.setX(sprite.getX() + delta).setRotation(sprite.getRotation() + delta);
घड़ी की विपरीत दिशा को घुमाने के लिए और क्षैतिज .. एक textureRegion तो
Sprite sprite = new Sprite(textureRegion, 0, 0, 128, 128);
sprite.setPosition(++mX, 0);
angle++;
sprite.setRotation(angle);
sprite.draw(batcher);
Libgdx आप और अधिक तो एक ही रास्ता है कि ऐसा करने के लिए देता है बनाने : आप Scene2D
का उपयोग कर सकते हैं और अपने Stage
पर Image
जोड़ सकते हैं। Image
, Actor
का एक उपवर्ग है ताकि आप इसे करने के लिए Action
रों जोड़ सकते हैं:
Image myImage = new Image(myTexture);
myImage.addAction(Actions.parallel(Actions.moveTo(endX, endY, duration), Actions.rotateBy(degrees, duration)));
myImage.setPosition(startX, startY);
myImage.setOrigin(sizeX/2, sizeY/2);
stage.add(myImage);
render
में आप तो stage.act()
है, जो स्थिति, रोटेशन, पैमाने को अद्यतन करता कॉल कर सकते हैं ... अपने सभी Actor
रों की और उसके बाद फोन stage.draw()
जो आपके सभी Actor
एस के लिए draw()
पर कॉल करेगा। छवि पहले से ही draw()
को संभालती है, इसलिए आपको अब इसके बारे में परवाह करने की आवश्यकता नहीं है।
तुम भी, scene2d
बिना यह कर सकते हैं अपने आप को सब कुछ अपडेट करके:
आप स्टोर कर सकते हैं डिग्री में एक int rotationSpeed
/सेकंड
आप एक int moveSpeed
इकाइयों में/सेक (शायद पिक्सेल स्टोर कर सकते हैं, लेकिन मैं या कैमरे का उपयोग करने का सुझाव देते हैं व्यूपोर्ट और अपने खुद के इकाई है, जो सभी उपकरणों पर बराबर होता है)
स्टोर float angle
, जो आपके Texture
के वर्तमान रोटेशन है का उपयोग करें और एक Vector2 position
है जो x और अपने Texture
के y स्थिति शामिल की दुकान।
यदि आप एक्स और वाई दिशा में स्थानांतरित करना चाहते हैं तो आप Vector2 direction
भी स्टोर कर सकते हैं, जो एक सामान्यीकृत Vector
है, जो x और y दिशा में आंदोलन का प्रतिशत प्रदान करता है, लेकिन यह एक अलग कहानी है।
अपने render(float delta)
तुम सब कुछ अद्यतन: बस एक नकारात्मक rotationSpeed
का उपयोग करें या angle-=
साथ angle+=
की जगह
angle+=delta*rotationSpeed;
angl%=360; // Limits the angle to be <= 360
while (angle < 0) // Unfortunally the "modulo" in java gives negative result for negativ values.
angle+=360;
position.x+=direction.x*moveSpeed*delta;
position.y+=direction.y*movSpeed*delta;
spriteBatch.draw(yourTextureRegion, position.x, position.y, sizeX/2, sizeY/2, sizeX, sizeY, scaleX, scaleY, angle);
दक्षिणावर्त रोटेशन के लिए।
उम्मीद है कि यह मदद करता है।
libgdx में एक अभिनेता को घुमाने के लिए यहां एक आसान है।
img.rotate(2f); or img.rotate(-2f);
तो निम्न नमूना मुझे (अनंत रोटेशन)
के लिए काम किया: सबसे पहले आप मूल निर्धारित करने की आवश्यकता:
img.setOrigin(getWidth/2,getHeight/2);
और फिर आप दक्षिणावर्त और घड़ी की विपरीत घुमा सकते हैं अपनी जरूरत के अनुसार विधि 1: (अनुशंसित)
loadingActor.addAction(Actions.repeat(RepeatAction.FOREVER, Actions.rotateBy(360, 1)));
विधि 2:
Image loadingActor = new Image(AssetsController.getInstance().getLoading());
loadingActor.setOrigin(Align.center);
final SequenceAction infiniteRotate = Actions.sequence();
infiniteRotate.addAction(Actions.rotateTo(0 , 0f));
infiniteRotate.addAction(Actions.rotateTo(360 , 1f));
loadingActor.addAction(Actions.forever(infiniteRotate));
आपका प्रश्न बहुत स्पष्ट नहीं है। क्या आप एक बनावट, स्प्राइट या छवि घूर्णन कर रहे हैं? "इसे स्क्रीन की शुरुआत से क्षैतिज रूप से स्क्रीन के अंत तक घुमाएं, स्टार घूर्णन के साथ" क्या आपका मतलब है कि आप घूर्णन करते समय तार को क्षैतिज स्थानांतरित करना चाहते हैं? –
@RahatAhmed: क्षमा करें, मेरे पास बनावट है, हाँ.मुझे क्षैतिज रूप से स्थानांतरित होने पर घूमने की आवश्यकता है –