2012-07-31 13 views
6
@Override 
public void render(float delta) { 
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 

    camera.update(); 
    sprite.setProjectionMatrix(camera.combined); 

    mLevel.getTiledMapRenderer().getProjectionMatrix().set(camera.combined); 
    Vector3 tmp = new Vector3(); 
    tmp.set(0, 0, 0); 
    camera.unproject(tmp); 
    mLevel.getTiledMapRenderer().render(tmp.x, tmp.y, camera.viewportWidth, camera.viewportHeight); 

    sprite.begin(); 
    ... 
    sprite.end(); 
} 

यहाँ मैं क्या मिलता है जब डेस्कटॉप संस्करण की शुरूआत:LibGDX - आवेदन दुर्घटनाओं जब कॉल TiledMapRenderer.render()

Exception in thread "LWJGL Application" java.lang.IllegalArgumentException: Number of remaining buffer elements is 0, must be at least 1. Because at most 1 elements can be returned, a buffer with at least 1 elements is required, regardless of actual returned element count 
    at org.lwjgl.BufferChecks.throwBufferSizeException(BufferChecks.java:162) 
    at org.lwjgl.BufferChecks.checkBufferSize(BufferChecks.java:189) 
    at org.lwjgl.BufferChecks.checkBuffer(BufferChecks.java:230) 
    at org.lwjgl.opengl.GL15.glBufferData(GL15.java:141) 
    at com.badlogic.gdx.backends.lwjgl.LwjglGL20.glBufferData(LwjglGL20.java:93) 
    at com.badlogic.gdx.graphics.glutils.VertexBufferObject.bind(VertexBufferObject.java:208) 
    at com.badlogic.gdx.graphics.Mesh.bind(Mesh.java:268) 
    at com.badlogic.gdx.graphics.g2d.SpriteCache.begin(SpriteCache.java:868) 
    at com.badlogic.gdx.graphics.g2d.tiled.TileMapRenderer.render(TileMapRenderer.java:336) 
    at com.badlogic.gdx.graphics.g2d.tiled.TileMapRenderer.render(TileMapRenderer.java:286) 
    at com.crunsh.libgdx.screens.GameScreen.render(GameScreen.java:102) 
    at com.badlogic.gdx.Game.render(Game.java:46) 
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:202) 
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:131) 

मैं दोनों this tuto और this one की कोशिश की है, और मैं एक ही त्रुटि मिलती है उसी पंक्ति पर mLevel.getTiledMapRenderer().render(tmp.x, tmp.y, camera.viewportWidth, camera.viewportHeight);

संपादित करें: मैंने अभी देखा है कि मेरी .tmx फ़ाइल का डेटा स्वचालित रूप से टाइल किए गए मानचित्र संपादक द्वारा एन्कोड किया गया था, इसलिए मैंने इसे अभी निष्क्रिय कर दिया, लेकिन फिर भी वही त्रुटि प्राप्त हुई।
अगर मैं कॉपी/पेस्ट this project (मैं पूरी परियोजना मतलब है, न केवल प्रस्तुत करना() विधि) यह काम करता है, लेकिन अपने ही परियोजना यह सिर्फ दुर्घटनाओं में अपने खुद के मानचित्र लोड करने के लिए जब मैं कोशिश ...

तो उस के बाद मैं सिर्फ कड़ी मैं पूर्व में दी गई की तरह कार्य करके और TiledMapHelper class लेखक प्रदान का उपयोग करके अपनी render() विधि को आसान बनाने का फैसला किया, तो मेरे render() विधि अब वहाँ है:

mHelper.getCamera().update(); 
mHelper.render(); 

फिर भी crashiiiiiiiiiiiiiingg .....
अगर कोई मदद कर सकता है तो कृपया कुछ मदद मिलेगी खासतौर से सराहना की क्योंकि एटीएम मैं वास्तव में पागल हो रहा हूँ!

+0

मैंने एक समान अपवाद देखा है जब मैंने अपनी जाल परिभाषाओं को गड़बड़ कर दिया है (या तो ऊर्ध्वाधर लोड करने या लंबाई को शून्य पर सेट करना भूलना)। तो, संभवतः आपके टाइल मानचित्र परिभाषा के साथ कुछ गलत है। यह देखने के लिए जांचें कि क्या आकार/स्केल आवश्यकताएं हैं (जैसे 2 या कम से कम एक्स, या ऐसा कुछ) जो आप नहीं मिल रहे हैं। –

+0

आपके उत्तर के लिए धन्यवाद। मैंने अभी जांच की है और सबकुछ 2 की शक्ति है: कैमरे का व्यूपोर्ट, प्रत्येक टाइल का आकार और मेरे स्तर के आकार का आकार जिसमें एक छवि में पैक की गई सभी टाइल्स शामिल हैं। केवल नक्शा का आकार फिट नहीं हुआ, लेकिन इसे बदलने से मेरी समस्या हल नहीं हुई, वैसे भी ट्यूटोरियल 60 * 15 के मानचित्र का उपयोग करता है, इसलिए नक्शा जो प्रदर्शित करता है वह नहीं करता है। – Flawyte

उत्तर

8

मैंने पाया क्या त्रुटि के कारण:
1) मेरी "packfile" में सभी टाइल था -1 उनके सूचकांक
2) मेरी "packfile" में सभी टाइल्स के रूप में उनके मूल टाइल फ़ाइल के रूप में एक ही नाम था नाम, लेकिन .png फ़ाइल के समान नाम नहीं है जिसमें पैक किए गए सभी टाइल्स हैं।

वर्तमान में मेरी स्क्रीन काली है, इसलिए मुझे लगता है कि कोई टाइल आकर्षित (शायद इसलिए कि मैं packfile में टाइल्स के लिए यादृच्छिक अनुक्रमित दिया - तय, पोस्ट के अंत देखें) है, लेकिन कोई अपवाद नहीं फेंक दिया जाता है और है कि बिंदु।

ये गलतियाँ उस कार्यक्रम के कारण हैं जो मैं उन टाइल्स को पैक करने के लिए उपयोग करता था जो मुझे समय जीतने के लिए प्रेरित करते थे। तो मैं अलग-अलग विकल्पों का प्रयास करूंगा या कुछ और इस्तेमाल करूंगा।
यदि आप प्रोग्राम को जानना चाहते हैं तो "TexturePacker GUI" v3.1.0 था।

यदि आपको पता है कि त्रुटियों से बचने के लिए मुझे किन विकल्पों का उपयोग/उपयोग नहीं करना चाहिए तो कृपया मुझे बताएं।

संपादित करें: मिले पैकिंग टाइलों के लिए उपयोगी और काम उपकरण, यहाँ यह है: http://freigabe.philweb.de/bubblr/texturepacker_edited.jar (लिंक मर चुका है, यह एक के बजाय =>http://bit.ly/1a831nv या किसी अन्य पैकिंग उपकरण का उपयोग =>http://bit.ly/1aLgAFt)

यह cmd खोलने के लिए और निर्देशिका जहां अपने .jar फ़ाइल और उसके बाद डाउनलोड किया करने के लिए जाने का उपयोग करें:

//You should create, in the same directory of the .jar file, two additionnal folders 
//Call the first folder 'input' and put in all your tiles (rename them "level_1.png", "level_..") 
//Call the 2nd folder 'output' and leave it empty 
//Then just type in the command prompt : java -jar nameOfDownloadedJarFile.jar input output level 
//Then rename the "input1.png" into "level.png", and "level.pack" into "level packfile" 
//Open "level packfile" with notepad and change "input1.png" into "level.png" 
//Then draw your map using "level.png" in TiledMapEditor 
//Then just follow dpk' tutorial for rendering the map and it should work 

यहाँ DPK के ट्यूटोरियल मैंने कहा है, बस यहां से पालन करें: http://dpk.net/2011/05/01/libgdx-box2d-tiled-maps-full-working-example-part-1/#p4

यदि एप्लिकेशन क्रैश नहीं होता है लेकिन स्क्रीन काला है, तो कैमरे की व्यूपोर्ट की चौड़ाई & ऊंचाई बढ़ाएं।

हैप्पी मैपिंग :)!

+0

बहुत बहुत धन्यवाद, मैं वही गलती करता हूं –

+0

मैंने "TexturePacker GUI" का भी उपयोग किया और उसी समस्या का सामना किया। विकल्प प्रदान करने के लिए धन्यवाद! –

+0

@miNde लिंक मर चुका है – tsukimi