0
我使用Node.js和特定的Socket.io編寫了一個使用LibGDX的多人遊戲。 當一個新的玩家連接,客戶端得到一個事件稱爲getPlayers:LibGDX/Socket.io:在當前線程中找不到OpenGL上下文
public void configSocketEvents(){
socket.on("getPlayers", new Emitter.Listener() {
@Override
public void call(Object... args) {
JSONArray objects = (JSONArray) args[0];
try {
for(int i = 0; i < objects.length(); i++){
Player enemy = new Player();
//...
Player類:
public Player() {
renderer = new ShapeRenderer();
init();
}
現在,當第二個客戶端連接,是您在客戶端輸出以下錯誤:
Exception in thread "EventThread" java.lang.RuntimeException: No OpenGL context found in the current thread.
...
at de.ej.facharbeitsspiel.Game.Player.<init>(Player.java:26)
at de.ej.facharbeitsspiel.Screens.GameScreenMP$1.call(GameScreenMP.java:149)
149行是行Player enemy = new Player();
,所以很明顯存在一個問題,即一個新的ShapeRenderer()
無法加載,因爲它'不是OpenGL渲染線程。
任何想法如何解決這個問題?預先感謝您
當然,不要在渲染線程中創建需要創建的另一個線程中的東西。您可能需要閱讀:https://en.wikipedia.org/wiki/Separation_of_concerns。你的Player類(遊戲邏輯)不應該關心ShapeRenderer(渲染邏輯)。無論如何,請閱讀:http://stackoverflow.com/help/how-to-ask,因爲你的問題太廣泛(不包含足夠的細節)來回答。 – Xoppa
但是,如果我在套接字事件之外創建一個播放器,一切工作正常。我的問題中缺少哪些信息? – erik4thewinners
如果你真的想採取這種方式(這是不推薦的),那麼這將幫助你包含所需的信息:http://stackoverflow.com/help/mcve。一般來說,如果你想在渲染線程上做一些事情,那麼使用'Gdx.app.postRunnable'。 – Xoppa