2013-08-28 7 views
2

this 튜토리얼에서 사용 된 것과 동일한 코드를 사용하고 있습니다. 그러나 프로젝트를 실행하는 동안 오류가 발생합니다. LibGDX의 기본 프로젝트가 정상적으로 작동했습니다.LibGDX/Box2D UnsatisfiedLinkError

오류 :

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

편집 : 그것 (클래스의 첫 번째 행)를 참조한다

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 변수를 포함하는 더 디버깅시, 난 아무것도 주석과 프로그램이 실행되었는데 (검은 상자를 제외하고는 아무 것도 나타나지 않았다. 왜냐하면 나는 정의 줄을 주석 처리 할 때 오류를 주석 처리했기 때문이다.)

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();을 시도 할 수 있습니다. 코드 또는 자바 라이브러리가 일부 네이티브 코드를 호출 할 때

static { 
    GdxNativesLoader.load(); 
} 

분명히, 링크 오류가 발생합니다 JVM이 클래스를로드 할 때 즉, 정적 방식에서 작업을 수행합니다.

+0

그 줄을 어디에 넣으라고 제안합니까? 코드가'create()'메소드에 도착하기 전에 깨집니다. – Chris

+0

감사합니다! 나는 질문에 수정 사항을 게시하려고하지만 다시 upvote 및 답변을 받아 들일거야 – Chris

+0

내 대답은 – aquaraga