2012-12-01 27 views
5

मैं एक परियोजना के लिए LibGDX का उपयोग कर रहा हूं, और मैं एक विशिष्ट मात्रा में एक बनावट को टाइल/दोहराने की कोशिश कर रहा हूं। फिलहाल मैं एक टेक्सचर रेगियन सेट को उचित आकार में सेट कर रहा हूं, और बनावट के किसी भी अतिरिक्त स्थान को भर दिया जा रहा है क्योंकि आप ओपनजीएल में "क्लैंप टू एज" का उपयोग करके उम्मीद करेंगे। मैंने सोचा कि इस व्यवहार को "दोहराएं" मोड में बदलने का एक आसान तरीका होगा, हालांकि मुझे ऐसा काम करने का कोई तरीका नहीं दिख रहा है, ऐसा लगता है कि ऐसा कुछ ऐसा लगता है जो बदलने के लिए काफी आसान होना चाहिए।LibGDX दोहराना TextureRegion

तो, मूल रूप से, क्या एलबीजीडीएक्स का उपयोग करके एक सेट क्षेत्र में एक छवि को दोहराने का एक आसान तरीका है, इसे लूप के किसी रूप में बनावट को मैन्युअल रूप से दोहराकर इसे मैन्युअल रूप से बनाने के लिए छोटा है?

उत्तर

1

मैंने इसे स्वयं नहीं किया है, लेकिन मुझे यह समस्या किसी अन्य समस्या का निवारण करने का प्रयास करते समय Google पर मिली। LIBGDX एपीआई में मुझे यह विधि मिली, शायद यह मदद कर सकता है?

http://libgdx.l33tlabs.org/docs/api/com/badlogic/gdx/graphics/Texture.html#setWrap(com.badlogic.gdx.graphics.Texture.TextureWrap, com.badlogic.gdx.graphics.Texture.TextureWrap)

यह हालांकि, बनावट ही नहीं बल्कि एक बनावट क्षेत्र के लिए नहीं है ...

+0

मुझे लगता है कि पहले पूछ पाया, लेकिन मैं मुसीबत हो रही है "बनावट" "TextureRegion" के लिए apposed के रूप में काम करने के साथ बातें कर रहा था। अभी के लिए मुझे लिबजीडीएक्स के वर्गों को थोड़ा सा संशोधित करके इस समस्या के आसपास मिल गया है, जो निश्चित रूप से आदर्श नहीं है, लेकिन यह चाल है। – Shamrock

+0

@ शमरॉक क्या आप यहां पोस्ट कर सकते हैं कि आपने इसे कैसे किया? तुमने क्या बदल दिया – Mars

6

आप एक TextureRegion उपयोग कर रहे हैं , तो आप ऐसा तरह एक TiledDrawable उपयोग कर सकते हैं:

TiledDrawable tile = new TiledDrawable(textureRegion); 
tile.draw(spriteBatcher, x, y, width, height); 
+0

यह बहुत अच्छा काम करता है: पी – martindilling

+0

सही काम करता है, साथ ही यह बनावट एटलस और स्प्राइट्स के साथ भी उपयोग किया जा सकता है। –

+1

केवल पिक्सल में काम करता है और न ही विश्व निर्देशांक। यदि एपीआई दुनिया में चौड़ाई और ऊंचाई थी, तो एपीआई बेहतर होगा, बैच को निर्देशांक सेट मैट्रिक्स के माध्यम से निर्देशित किया जाता है – RichieHH

3

आप अपने बनावट पर "SetWrap" का उपयोग करें और है कि बनावट के आधार पर एक TextureRegion बना सकते हैं। महत्वपूर्ण: मुझे इसे समझने में थोड़ी देर लग गई, लेकिन प्रतिबिंबित करने के लिए, आपका बनावट दो आकार की शक्ति होनी चाहिए। यह एंड्रॉइड पर काम कर रहा था लेकिन आईओएस पर नहीं था और आपको कोई संदेश नहीं मिला - यह काला के रूप में दिखाया गया था। तो यह 4x4 या 8x8, 16x16 .. 256x256 या 512x512 .. एक 3x3 बनाने के लिए नजर आता छवि (या axb आकार)

Texture imgTexture = new Texture(Gdx.files.internal("badlogic.jpg")); 
imgTexture.setWrap(Texture.TextureWrap.MirroredRepeat, Texture.TextureWrap.MirroredRepeat); 
TextureRegion imgTextureRegion = new TextureRegion(imgTexture); 
imgTextureRegion.setRegion(0,0,imgTexture.getWidth()*3,imgTexture.getHeight()*3); 

आप देंगे होना चाहिए इस: enter image description here

नीचे आप देख सकते हैं नमूना कोड है कि उस चित्र उत्पन्न एक स्टेज और छवि अभिनेता (Scene2D) का उपयोग कर

public class GameScreen implements Screen { 

    MyGdxGame game; 
    private Stage stage; 

    public GameScreen(MyGdxGame aGame){ 
     stage = new Stage(new ScreenViewport()); 
     game = aGame; 
     Texture imgTexture = new Texture(Gdx.files.internal("badlogic.jpg")); 
     imgTexture.setWrap(Texture.TextureWrap.MirroredRepeat, Texture.TextureWrap.MirroredRepeat); 
     TextureRegion imgTextureRegion = new TextureRegion(imgTexture); 
     imgTextureRegion.setRegion(0,0,imgTexture.getWidth()*3,imgTexture.getHeight()*3); 

     TextureRegionDrawable imgTextureRegionDrawable = new TextureRegionDrawable(imgTextureRegion); 
     Image img = new Image(); 
     img.setDrawable(imgTextureRegionDrawable); 
     img.setSize(imgTexture.getWidth()*3,imgTexture.getHeight()*3); 
     stage.addActor(img); 
    } 

    @Override 
    public void show() { 

    } 

    @Override 
    public void render(float delta) { 
     Gdx.gl.glClearColor(1, 0, 0, 1); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
     stage.act(delta); 
     stage.draw(); 
    } 

    @Override 
    public void resize(int width, int height) { 
     stage.getViewport().update(width, height, true); 
    } 

    @Override 
    public void pause() { 

    } 

    @Override 
    public void resume() { 

    } 

    @Override 
    public void hide() { 

    } 

    @Override 
    public void dispose() { 
     stage.dispose(); 
    } 
}