2012-07-31 38 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(); 
} 

Dưới đây là những gì tôi nhận được khi tung ra phiên bản máy tính để bàn:LibGDX - Ứng dụng bị treo khi gọi 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) 

Tôi đã thử cả hai this tutothis one, và tôi nhận được lỗi tương tự tại cùng một dòng mLevel.getTiledMapRenderer().render(tmp.x, tmp.y, camera.viewportWidth, camera.viewportHeight);.

CHỈNH SỬA: Tôi vừa nhận thấy rằng dữ liệu tệp .tmx của tôi được mã hóa tự động biên soạn bởi Tiled Map Editor, vì vậy tôi chỉ hủy kích hoạt nó, nhưng vẫn gặp lỗi tương tự.
Nếu tôi sao chép/dán this project (Tôi có nghĩa là toàn bộ dự án, không chỉ render() phương pháp) nó hoạt động nhưng khi tôi cố gắng để tải bản đồ của riêng tôi trong dự án của riêng tôi nó chỉ bị treo ...

Vì vậy, sau đó tôi đã quyết định để đơn giản hóa phương pháp render() tôi bởi chỉ cần làm như liên kết tôi đưa cho trước và bằng TiledMapHelper class tác giả cung cấp, do đó phương pháp render() của tôi bây giờ:

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

Tuy crashiiiiiiiiiiiiiingg .....
Nếu ai đó có thể vui lòng cung cấp một số trợ giúp, nó sẽ là gr ăn ngon bởi vì tôi thực sự phát điên!

+0

Tôi đã nhìn thấy một ngoại lệ tương tự khi tôi đã sai lầm định nghĩa lưới của tôi (hoặc quên để tải verticies hoặc thiết lập chiều dài bằng không). Vì vậy, rất có thể điều gì đó không chính xác với định nghĩa bản đồ của bạn. Kiểm tra xem có yêu cầu về kích thước/quy mô không (giống như sức mạnh của 2 hoặc tối thiểu X hoặc thứ gì đó tương tự) mà bạn không đáp ứng. –

+0

Cảm ơn câu trả lời của bạn. Tôi chỉ cần kiểm tra và tất cả mọi thứ nếu một sức mạnh của 2: các viewport của máy ảnh, kích thước của mỗi ngói và kích thước của level.png của tôi có chứa tất cả các gạch đóng gói trong một hình ảnh. Chỉ có kích thước bản đồ không phù hợp, nhưng việc thay đổi nó không giải quyết được vấn đề của tôi, dù sao hướng dẫn sử dụng bản đồ 60 * 15 để bản đồ hiển thị cũng không. – Flawyte

Trả lời

8

Tôi tìm thấy những gì gây ra lỗi:
1) tất cả các gạch trong "packfile" tôi đã -1 như chỉ mục của họ
2) tất cả các gạch trong "packfile" tôi đã có cùng tên với tập tin gạch ban đầu của họ tên, nhưng không trùng tên với tệp .png chứa tất cả các ô được đóng gói.

Hiện nay màn hình của tôi là màu đen vì vậy tôi nghĩ rằng không có gạch là vẽ (có lẽ vì tôi đã chỉ ngẫu nhiên để gạch trong packfile - cố định, xem kết thúc của bài) nhưng không có trường hợp ngoại lệ được ném và đó là điểm.

Những sai lầm đó là do chương trình tôi đã sử dụng để đóng gói các viên gạch được cho là sẽ khiến tôi giành được thời gian lol. Vì vậy, tôi sẽ thử các tùy chọn khác nhau hoặc sử dụng một cái gì đó khác.
Nếu bạn muốn biết chương trình là "TexturePacker GUI" v3.1.0.

Nếu bạn biết tùy chọn nào tôi nên/không sử dụng để tránh lỗi, vui lòng cho tôi biết.

EDIT: Tìm thấy một hữu ích và công cụ làm việc cho gạch đóng gói, ở đây là: http://freigabe.philweb.de/bubblr/texturepacker_edited.jar (liên kết là chết; sử dụng cái này thay vì =>http://bit.ly/1a831nv hoặc công cụ đóng gói khác =>http://bit.ly/1aLgAFt)

để sử dụng nó mở cmd và đi đến thư mục mà bạn đã tải về các tập tin .jar và sau đó:

//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 

Dưới đây là hướng dẫn DPK của tôi đã đề cập, chỉ cần làm theo từ đây: http://dpk.net/2011/05/01/libgdx-box2d-tiled-maps-full-working-example-part-1/#p4

Nếu ứng dụng không bị lỗi nhưng màn hình có màu đen, chỉ cần tăng chiều rộng của khung nhìn của máy ảnh là & chiều cao.

Lập bản đồ hạnh phúc :)!

+0

cảm ơn rất nhiều, tôi làm những sai lầm tương tự –

+0

Tôi cũng đã sử dụng GUI "TexturePacker" và gặp phải vấn đề tương tự. Cảm ơn bạn đã cung cấp giải pháp thay thế! –

+0

@miNde liên kết đã chết – tsukimi

Các vấn đề liên quan