2013-08-28 63 views
2

我使用的EXACT代码与this教程中使用的代码相同,但由于某些原因,我在尝试运行该项目时遇到错误。 LibGDX的默认项目工作正常。LibGDX/Box2D UnsatisfiedLinkError

错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: com.badlogic.gdx.physics.box2d.World.newWorld(FFZ)J 
at com.badlogic.gdx.physics.box2d.World.newWorld(Native Method) 
at com.badlogic.gdx.physics.box2d.World.<init>(World.java:222) 
at net.ocps.tchs.permarun.PermaRun.<init>(PermaRun.java:19) 
at net.ocps.tchs.permarun.Main.main(Main.java:14) 

线它指的是(在类中的第一行):

World world = new World(new Vector2(0, -100), true); 

编辑:在进一步调试,我注释掉任何涉及的所述world变量和该程序运行(除黑盒外没有任何出现,因为我在注释掉world定义行时注释了任何错误。)

EDIT2:全代码工作(有使用GdxNativesLoader.load();不同的方式,但是这是我决定使用的方式,这要归功于aquaraga)

import com.badlogic.gdx.ApplicationListener; 
import com.badlogic.gdx.Gdx; 
import com.badlogic.gdx.graphics.GL10; 
import com.badlogic.gdx.graphics.OrthographicCamera; 
import com.badlogic.gdx.math.Vector2; 
import com.badlogic.gdx.physics.box2d.Body; 
import com.badlogic.gdx.physics.box2d.BodyDef; 
import com.badlogic.gdx.physics.box2d.BodyDef.BodyType; 
import com.badlogic.gdx.physics.box2d.Box2DDebugRenderer; 
import com.badlogic.gdx.physics.box2d.CircleShape; 
import com.badlogic.gdx.physics.box2d.FixtureDef; 
import com.badlogic.gdx.physics.box2d.PolygonShape; 
import com.badlogic.gdx.physics.box2d.World; 
import com.badlogic.gdx.utils.GdxNativesLoader; 
public class PermaRun implements ApplicationListener { 
    World world; 
    Box2DDebugRenderer debugRenderer; 
    OrthographicCamera camera; 
    static final float BOX_STEP=1/60f; 
    static final int BOX_VELOCITY_ITERATIONS=6; 
    static final int BOX_POSITION_ITERATIONS=2; 
    static final float WORLD_TO_BOX=0.01f; 
    static final float BOX_WORLD_TO=100f; 
    @Override 
    public void create() { 
      GdxNativesLoader.load(); 
      world = new World(new Vector2(0.0f, -100.0f), true); 
      camera = new OrthographicCamera(); 
      camera.viewportHeight = 320; 
      camera.viewportWidth = 480; 
      camera.position.set(camera.viewportWidth * .5f, camera.viewportHeight * .5f, 0f); 
      camera.update(); 
      //Ground body 
      BodyDef groundBodyDef =new BodyDef(); 
      groundBodyDef.position.set(new Vector2(0, 10)); 
      Body groundBody = world.createBody(groundBodyDef); 
      PolygonShape groundBox = new PolygonShape(); 
      groundBox.setAsBox((camera.viewportWidth) * 2, 10.0f); 
      groundBody.createFixture(groundBox, 0.0f); 
      //Dynamic Body 
      BodyDef bodyDef = new BodyDef(); 
      bodyDef.type = BodyType.DynamicBody; 
      bodyDef.position.set(camera.viewportWidth/2, camera.viewportHeight/2); 
      Body body = world.createBody(bodyDef); 
      CircleShape dynamicCircle = new CircleShape(); 
      dynamicCircle.setRadius(5f); 
      FixtureDef fixtureDef = new FixtureDef(); 
      fixtureDef.shape = dynamicCircle; 
      fixtureDef.density = 1.0f; 
      fixtureDef.friction = 0.0f; 
      fixtureDef.restitution = 1; 
      body.createFixture(fixtureDef); 
      debugRenderer = new Box2DDebugRenderer(); 
    } 
    @Override 
    public void dispose() { 
    } 
    @Override 
    public void render() {    
      Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 
      debugRenderer.render(world, camera.combined); 
      world.step(BOX_STEP, BOX_VELOCITY_ITERATIONS, BOX_POSITION_ITERATIONS); 
    } 
    @Override 
    public void resize(int width, int height) { 
    } 
    @Override 
    public void pause() { 
    } 
    @Override 
    public void resume() { 
    } 

} 

回答

5

你可能想尝试GdxNativesLoader.load();。以静态的方式执行,即当JVM加载类时:即,当JVM加载类时:当代码或java库调用某些本地代码时,显然链接错误发生。

+0

你在哪里建议我放那条线?代码在它到达'create()'方法之前就会中断 – Chris

+0

了解它,谢谢!我会在问题中发布修复,但我会upvote并接受你的答案,再次感谢 – Chris

+0

我已经更新了我的答案 – aquaraga