2015-01-21 31 views
0

所以我LibGDX项目工程完全罚款在桌面上,并在Android太后,但是当我实现它测量球员得分的浮动,游戏会崩溃在Android上。这个想法是,每次屏幕向上滚动时,分数都会降低,当它向下滚动时,分数会增加。我正在使用gesturedetector控制器进行滚动。 下面是主要代码:LibGDX And​​roid上的崩溃实施一些彩车

public class WorldScreen implements Screen{ 

    private Texture bgCity; 
    private Texture bgLoop; 
    private Texture hud; 

    public static OrthographicCamera camera; 
    SpriteBatch batch; 

    Rectangle player; 
    Rectangle background; 
    Rectangle backgroundloop; 

    public float camx = 0; 
    public float camy = 0; 

    public static float score = 384400000; 

    GestureListenerC controller; 

    public WorldScreen(final JetpackGame aa) { 

    } 

    @Override 
    public void render(float delta) { 
     Gdx.gl.glClearColor(0, 0, 0, 1); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

     camx = camera.viewportWidth/2f; 
     camy = camera.viewportHeight/2f; 

     controller.update(); 
     camera.update(); 

     batch.setProjectionMatrix(camera.combined); 
     batch.begin(); 
     batch.draw(bgCity, background.x, background.y); 
     if(background.y <= -3296){ 
      if(backgroundloop.y <= -800) backgroundloop.y = 0; 
     } 

     if(camy >= 100) batch.draw(bgLoop, backgroundloop.x, backgroundloop.y); 
     if(camera.position.y >= 5360) camera.position.y = 4420; 

     batch.end();   



    } 
    @Override 
    public void resize(int width, int height) { 

    } 

    @Override 
    public void show() { 
     controller = new GestureListenerC(); 
     GestureDetector gestureDetector = new GestureDetector(20, 0.5f, 2, 0.15f, controller); 
     Gdx.input.setInputProcessor(gestureDetector); 

     bgCity = new Texture(Gdx.files.internal("img/city_BG.png")); 
     bgLoop = new Texture(Gdx.files.internal("img/loopBG.png")); 
     hud = new Texture(Gdx.files.internal("img/hud.png")); 

     camera = new OrthographicCamera(); 
     camera.setToOrtho(false, 420,800); 
     batch = new SpriteBatch(); 

     player = new Rectangle(); 
     player.x = 420/2; 
     player.y = 800/2; 

     background = new Rectangle(); 
     background.x = 0; 
     background.y = 0; 
     background.width = 479; 
     background.height = 4096; 

     backgroundloop = new Rectangle(); 
     backgroundloop.x = 0; 
     backgroundloop.y = 4096; 
     backgroundloop.width = 512; 
     backgroundloop.height = 1024; 

    } 

    @Override 
    public void hide() { 

    } 

    @Override 
    public void pause() { 

    } 

    @Override 
    public void resume() { 

    } 

    @Override 
    public void dispose() { 
     batch.dispose(); 
     bgCity.dispose(); 
     bgLoop.dispose(); 
     hud.dispose(); 
    } 

    } 

And here is the controller class: 

    public class GestureListenerC implements GestureListener{ 

    public static float velX, velY; 
    public static boolean flinging = false; 
    float initialScale = 1; 

    public boolean touchDown (float x, float y, int pointer, int button) { 
     flinging = false; 
     return false; 
    } 

    @Override 
    public boolean tap (float x, float y, int count, int button) { 
     return false; 
    } 

    @Override 
    public boolean longPress (float x, float y) { 
     return false; 
    } 

    @Override 
    public boolean fling (float velocityX, float velocityY, int button) { 
     flinging = true; 
     velX = WorldScreen.camera.zoom * velocityX * 0.5f; 
     velY = WorldScreen.camera.zoom * velocityY * 0.5f; 
     return false; 
    } 

    @Override 
    public boolean pan (float x, float y, float deltaX, float deltaY) { 
     WorldScreen.camera.position.y += deltaY; 
     WorldScreen.score -= deltaY; 
     return false; 
    } 

    @Override 
    public boolean panStop (float x, float y, int pointer, int button) { 
     return false; 
    } 

    @Override 
    public boolean zoom (float originalDistance, float currentDistance) { 
     return false; 
    } 

    @Override 
    public boolean pinch (Vector2 initialFirstPointer, Vector2 initialSecondPointer, Vector2 firstPointer, Vector2 secondPointer) { 
     return false; 
    } 

    public void update() { 
     if (flinging) { 
      velY *= 0.98f; 
      WorldScreen.score -= 0.2f * velY; 
      WorldScreen.camera.position.add(0, velY * Gdx.graphics.getDeltaTime(), 0); 
      if (Math.abs(velY) < 0.01f) velY = 0; 
     } 
    } 
} 

这是一个模拟器运行它后什么logcat的说:(我不喜欢使用它,因为它经常死机由于模拟器图形问题)

01-21 10:01:37.982: W/dalvikvm(274): threadid=1: thread exiting with uncaught  exception (group=0x4001d800) 
01-21 10:01:38.002: E/AndroidRuntime(274): FATAL EXCEPTION: main 
01-21 10:01:38.002: E/AndroidRuntime(274): java.lang.RuntimeException: Unable to start activityy ComponentInfo{com.vahlaville.game.android/com.vahlaville.game.android.AndroidLauncher}: com.badlogic.gdx.utils.GdxRuntimeException: Libgdx requires OpenGL ES 2.0 
01-21 10:01:38.002: E/AndroidRuntime(274): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
01-21 10:01:38.002: E/AndroidRuntime(274): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
01-21 10:01:38.002: E/AndroidRuntime(274): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
01-21 10:01:38.002: E/AndroidRuntime(274): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
01-21 10:01:38.002: E/AndroidRuntime(274): at android.os.Handler.dispatchMessage(Handler.java:99) 
01-21 10:01:38.002: E/AndroidRuntime(274): at android.os.Looper.loop(Looper.java:123) 
01-21 10:01:38.002: E/AndroidRuntime(274): at android.app.ActivityThread.main(ActivityThread.java:4627) 
01-21 10:01:38.002: E/AndroidRuntime(274): at java.lang.reflect.Method.invokeNative(Native Method) 
01-21 10:01:38.002: E/AndroidRuntime(274): at java.lang.reflect.Method.invoke(Method.java:521) 
01-21 10:01:38.002: E/AndroidRuntime(274): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
01-21 10:01:38.002: E/AndroidRuntime(274): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
01-21 10:01:38.002: E/AndroidRuntime(274): at dalvik.system.NativeStart.main(Native Method) 
01-21 10:01:38.002: E/AndroidRuntime(274): Caused by: com.badlogic.gdx.utils.GdxRuntimeException: Libgdx requires OpenGL ES 2.0 
01-21 10:01:38.002: E/AndroidRuntime(274): at com.badlogic.gdx.backends.android.AndroidGraphics.createGLSurfaceView(AndroidGraphics.java:122) 
01-21 10:01:38.002: E/AndroidRuntime(274): at com.badlogic.gdx.backends.android.AndroidGraphics.<init>(AndroidGraphics.java:102) 
01-21 10:01:38.002: E/AndroidRuntime(274): at com.badlogic.gdx.backends.android.AndroidGraphics.<init>(AndroidGraphics.java:95) 
01-21 10:01:38.002: E/AndroidRuntime(274): at com.badlogic.gdx.backends.android.AndroidApplication.init(AndroidApplication.java:133) 
01-21 10:01:38.002: E/AndroidRuntime(274): at com.badlogic.gdx.backends.android.AndroidApplication.initialize(AndroidApplication.java:99) 
01-21 10:01:38.002: E/AndroidRuntime(274): at com.vahlaville.game.android.AndroidLauncher.onCreate(AndroidLauncher.java:18) 
01-21 10:01:38.002: E/AndroidRuntime(274): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
01-21 10:01:38.002: E/AndroidRuntime(274): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
01-21 10:01:38.002: E/AndroidRuntime(274): ... 11 more 
+0

崩溃应该是指logcat的堆栈跟踪,对不对?请张贴它。 – shkschneider 2015-01-21 09:30:54

+0

我添加了logcat消息。但是我不知道它们是否有用,因为游戏通常会因模拟器在图形问题上崩溃而无法在物理设备上遇到。 – VVahla 2015-01-21 10:09:13

+0

如果你看看那个堆栈跟踪,崩溃是由于模拟器不支持OpenGL ES 2.0,所以它与你的实际问题无关。 – Tenfour04 2015-01-21 13:45:02

回答

1

GdxRuntimeException:Libgdx需要OpenGL ES 2.0

请确保您有这个在`AndroidManifest.xml中:

<uses-feature android:glEsVersion="0x00020000" android:required="true" /> 

如果你这样做,那么就意味着您的设备不具备OpenGL ES的V2,这是需要通过libgdx