LibGDX

2012-02-25 15 views
5

का उपयोग करके छवि घड़ी की घुमाएं घुमाएं हम LibGDX का उपयोग करके छवि घड़ी को कैसे घुमा सकते हैं? जो मैं देख रहा हूं वह है कि जब कोई छवि लोड हो जाती है, तो एक स्टार मान लीजिए, मुझे स्क्रीन की शुरुआत से स्क्रीन को क्षैतिज रूप से स्क्रीन के अंत तक घूमने की ज़रूरत है, स्टार घूर्णन के साथ, मैं libgdx में ऐसा कैसे कर सकता हूं?LibGDX

+0

आपका प्रश्न बहुत स्पष्ट नहीं है। क्या आप एक बनावट, स्प्राइट या छवि घूर्णन कर रहे हैं? "इसे स्क्रीन की शुरुआत से क्षैतिज रूप से स्क्रीन के अंत तक घुमाएं, स्टार घूर्णन के साथ" क्या आपका मतलब है कि आप घूर्णन करते समय तार को क्षैतिज स्थानांतरित करना चाहते हैं? –

+0

@RahatAhmed: क्षमा करें, मेरे पास बनावट है, हाँ.मुझे क्षैतिज रूप से स्थानांतरित होने पर घूमने की आवश्यकता है –

उत्तर

10

जब आप अपने स्प्राइटबैच के साथ बनावट खींचते हैं, तो आप ड्रॉ फ़ंक्शंस में से एक का उपयोग कर सकते हैं जिसमें रोटेशन शामिल है। SpriteBatch

आप स्थिति और रोटेशन के लिए एक चर रख सकते हैं, और हर बार जब आप इसे बारी बारी से करने के लिए, जबकि क्षैतिज चलती प्रस्तुत करना स्थिति के रोटेशन और एक्स घटक वृद्धि: यह जावाडोक सभी ड्रा कार्य करती है।

1

आप सीन 2 डी क्रियाओं का भी उपयोग कर सकते हैं। मेरे यहां एक उदाहरण है जिसमें क्षुद्रग्रह-प्रकार की चीज स्क्रीन के नीचे गिर रही है और घूर्णन कर रही है। अपने बनाने पर

:

http://www.netthreads.co.uk/2012/02/09/libgdx-scene2d-demo-with-scene-transitions/

3

के बाद किसी भी स्प्राइट

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; 
0

के लिए काउंटर की स्थापना की आप इस तरह भी यह कर सकते हैं बारी बारी से करने कार्यान्वयन है विधि

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); 
1

घड़ी की विपरीत दिशा को घुमाने के लिए और क्षैतिज .. एक textureRegion तो

Sprite sprite = new Sprite(textureRegion, 0, 0, 128, 128); 
sprite.setPosition(++mX, 0); 
angle++; 
sprite.setRotation(angle); 
sprite.draw(batcher); 
3

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); 

दक्षिणावर्त रोटेशन के लिए।

उम्मीद है कि यह मदद करता है।

0

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

img.rotate(2f); or img.rotate(-2f); 
0

तो निम्न नमूना मुझे (अनंत रोटेशन)

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

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));