2016-04-25 6 views
2

initialisiert Ich habe meine Libgdx Anwendung wurde Codierung (für Desktop nur) für eine Weile und nach dem Code Teil für Teil zu bereinigen Entscheidung iv'e in ein Problem bekommen kann ich nicht scheinen mir zu lösen ..Libgdx noch nicht

Ausnahme:

Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: java.lang.UnsatisfiedLinkError: com.badlogic.gdx.physics.box2d.PolygonShape.newPolygonShape()J 
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:131) 
Caused by: java.lang.UnsatisfiedLinkError: com.badlogic.gdx.physics.box2d.PolygonShape.newPolygonShape()J 
    at com.badlogic.gdx.physics.box2d.PolygonShape.newPolygonShape(Native Method) 
    at com.badlogic.gdx.physics.box2d.PolygonShape.<init>(PolygonShape.java:29) 
    at com.mygdx.game.handler.BodyEditorLoader.<init>(BodyEditorLoader.java:41) 
    at com.mygdx.game.util.GameUtils.init(GameUtils.java:23) 
    at com.mygdx.game.DungeonLife.create(DungeonLife.java:168) 
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:147) 
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:124) 

nach für eine Weile googeln dachte ich meinen Fehler wie in this Thread wie in

ein weiteres Problem könnte sein, erwähnt wird, dass Sie instantiieren einen SpriteBatch (oder etwas anderes, das intern einen SpriteBatch verwendet) zu früh (sah im StackTrace ähnlich aus).

aber als die Antwort Statt

erwähnt, schaffen solche Dinge in den erstellen/show Methoden des Spiels.

Ich kann nicht scheinen zu verstehen, wenn Libgdx initialisiert und einsatzbereit, und wo meine GameUtils.init() -Methode platzieren Libgdx sicherzustellen

initialisiert

Mein Code ist wie folgt: (i haben entnommen e relevanten Methoden)

Anwendungsklasse

package com.mygdx.game; 

import box2dLight.RayHandler; 
import com.badlogic.gdx.ApplicationAdapter; 
import com.badlogic.gdx.Gdx; 
import com.badlogic.gdx.graphics.Color; 
import com.badlogic.gdx.graphics.GL20; 
import com.badlogic.gdx.graphics.OrthographicCamera; 
import com.badlogic.gdx.graphics.Texture; 
import com.badlogic.gdx.graphics.g2d.TextureRegion; 
import com.badlogic.gdx.maps.MapProperties; 
import com.badlogic.gdx.maps.tiled.TiledMap; 
import com.badlogic.gdx.maps.tiled.TmxMapLoader; 
import com.badlogic.gdx.maps.tiled.renderers.OrthogonalTiledMapRenderer; 
import com.badlogic.gdx.math.Vector2; 
import com.badlogic.gdx.physics.box2d.*; 
import com.mygdx.game.entity.MobEntity; 
import com.mygdx.game.entity.PhysicalEntity; 
import com.mygdx.game.entity.Player; 
import com.mygdx.game.entity.Weapon; 
import com.mygdx.game.handler.*; 
import com.mygdx.game.util.CollisionConstants; 
import com.mygdx.game.util.GameUtils; 
import com.mygdx.game.util.TileObjectUtil; 
import com.mygdx.game.util.WorldConstants; 
import com.mygdx.game.valtype.WeaponDefinition; 

public class DungeonLife extends ApplicationAdapter implements WorldConstants { 

    OrthographicCamera camera; 

    float width , height; 

    Texture texture; 
    TextureRegion[] enttex; 

    //TEMP 
    MobEntity demo; 

    Player thePlayer; 
    PlayerInputProcessor playerInputProcessor; 

    ScreenUI ui; 

    int mapWidth , mapHeight; 

    //======================================== 
    GameMap gameMap; 
    //======================================== 


    @Override 
    public void create() { 

     texture = new Texture("maps/img/tileset_entity.png"); 

     enttex = new TextureRegion[(int) ((texture.getWidth()*texture.getHeight())/(BLOCK*BLOCK))]; 

     enttex[0] = new TextureRegion(texture , 0 , 0 , (int)BLOCK , (int)BLOCK); 
     enttex[1] = new TextureRegion(texture , (int)BLOCK , 0 , (int)BLOCK , (int)BLOCK); 

     width = Gdx.graphics.getWidth()/5; 
     height = Gdx.graphics.getHeight()/5; 
     camera = new OrthographicCamera(width,height); 
     camera.position.set(width/2, height/2, 0); 

     camera.update(); 

     GameUtils.init(); // <------this guy 

     //init(); 


    } ... 

GameUtils

package com.mygdx.game.util; 

import com.badlogic.gdx.Gdx; 
import com.badlogic.gdx.graphics.Texture; 
import com.badlogic.gdx.graphics.glutils.ShapeRenderer; 
import com.badlogic.gdx.maps.tiled.TiledMap; 
import com.badlogic.gdx.maps.tiled.TmxMapLoader; 
import com.badlogic.gdx.physics.box2d.Body; 
import com.badlogic.gdx.physics.box2d.World; 
import com.mygdx.game.entity.PhysicalEntity; 
import com.mygdx.game.handler.*; 

import java.util.PriorityQueue; 

public class GameUtils { 

    public static void init(){ 

     weapon_bodyEditorLoader = new BodyEditorLoader(Gdx.files.internal("textures/weapons/dungeonlife_weapons.json")); 
     resourceManager = new ResourceManager(); 
     resourceManager.addRes("friendlyhealth" , new Texture("textures/ui/friendlyhealth.png")); 
     resourceManager.addRes("enemyhealth" , new Texture("textures/ui/enemyhealth.png")); 
     tmxMapLoader = new TmxMapLoader(); 
     gameContactListender = new GameContactListender(); 


    } 


    //GLOBAL 
    public static BodyEditorLoader weapon_bodyEditorLoader; 
    public static GameContactListender gameContactListender; 
    public static ResourceManager resourceManager; 
    public static TmxMapLoader tmxMapLoader; 


    //CURRENTS ============================ 

    public static GameMap CURRENT_GAMEMAP; 

} 

Desktop-Launcher(die übliche)

package com.mygdx.game.desktop; 

import com.badlogic.gdx.backends.lwjgl.LwjglApplication; 
import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration; 
import com.mygdx.game.DungeonLife; 
import com.mygdx.game.util.GameUtils; 

public class DesktopLauncher { 
    public static void main (String[] arg) { 
     LwjglApplicationConfiguration config = new LwjglApplicationConfiguration(); 
     config.useGL30 = false; 
     config.width=640; 
     config.height=360; 
     DungeonLife dungeonLife = new DungeonLife(); 
     new LwjglApplication(dungeonLife, config); 
    } 
} 

Hilfe ist viel appriciated! : D

+0

es scheint, dass das Generieren einer neuen box2d Welt vor dem Aufruf von gameUtils.init() das Problem aus irgendeinem Grund löst – kw7

Antwort

1

Wie ich bereits in der anderen verknüpften Antwort geschrieben habe, stellen Sie sicher, dass Ihr Projekt korrekt eingerichtet ist. Box2D ist eine Erweiterung und benötigt eigene native Bibliotheken, um ausgeführt werden zu können.

Es scheint, dass es ein spezifisches Problem mit den Box2D Einheimischen ist, die noch nicht geladen sind. Sie werden nicht automatisch geladen, wenn LibGDX initialisiert wird, aber Sie müssen das selbst auslösen (siehe wiki).

Der Code, den Sie gepostet haben, sieht korrekt aus, aber bevor Sie alles verwenden können, was mit Box2D zu tun hat, müssen Sie Box2D.init() anrufen. Alternativ dazu ist das Erstellen eines World Objekts das Gleiche, aber es ist nicht der beste Weg, dies zu tun.