android 的 libGDX 动画

Posted

技术标签:

【中文标题】android 的 libGDX 动画【英文标题】:libGDX animation for android 【发布时间】:2015-01-22 19:53:10 【问题描述】:

如果我为桌面启动它,它运行得非常好,但在我的 android 导出后它在我启动应用程序后立即崩溃。

所以我的问题...:

它适用于桌面但不适用于我的 Android 有什么问题?

public class Player implements Serializable

/**
 * 
 */
private static final long serialVersionUID = -7913517465400462738L;

Vector2 position;
private static final int col = 4;
private static final int row = 4;
private Animation animation;
private Texture playerTexture;
private TextureRegion[] frames;
private TextureRegion currentFrame;
private float stateTime;
private int x,y, deltaX, deltaY;



public Player(Vector2 position)
    this.position = position;
    playerTexture = new Texture(Gdx.files.internal("Charackter/charackter_sprite.png"));
    TextureRegion[][] temp = TextureRegion.split(playerTexture, playerTexture.getWidth() / col, playerTexture.getHeight() / row);
    frames = new TextureRegion[col* row];

    int index = 0;
    for(int i = 0; i < row; i++)
        for(int j = 0; j < col; j++)
            frames[index++] = temp[i][j];
        
    
    animation = new Animation(1, frames);
    stateTime = 0;
    currentFrame = animation.getKeyFrame(0);
    deltaX = Gdx.graphics.getWidth();
    deltaY = Gdx.graphics.getHeight();


public void update()

    if(stateTime < 4)
    stateTime += Gdx.graphics.getDeltaTime();
    
    else
        stateTime = 0;
           

    if (Gdx.input.isTouched())
    
        x = Gdx.input.getX();
        y = Gdx.input.getY();
        if(x < deltaX * 50 / 100 && y > deltaY * 35 / 100 && y < deltaY * 65 / 100)
            position.x -= 1;
            currentFrame = animation.getKeyFrame(4 + stateTime);
        
        if(x > deltaX * 50 / 100 && y > deltaY * 35 / 100 && y < deltaY * 65 / 100)
            position.x += 1;
            currentFrame = animation.getKeyFrame(8 + stateTime);
        
        if(y < deltaY * 35 / 100 )
            position.y += 1;
            currentFrame = animation.getKeyFrame(12 + stateTime);
        
        if(y > deltaY * 65 / 100 )
            position.y -= 1;
            currentFrame = animation.getKeyFrame(0 + stateTime);
        
    



public Vector2 getPosition() 
    return position;

public void setPosition(Vector2 position) 
    this.position = position;

public TextureRegion getCurrentFrame() 
    return currentFrame;


.

public class PlayScreen implements Screen 

private SpriteBatch batch;
private Vector2 position;
private Game game;
private Player player;
private Texture bild;

public PlayScreen(Game game)
    this.game = game;


@Override
public void render(float delta)        
    Gdx.gl.glClearColor(1, 1, 1, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    player.update();
    batch.begin();
    batch.draw(player.getCurrentFrame(), player.getPosition().x, player.getPosition().y);
    batch.end();


@Override
public void resize(int width, int height) 
    // TODO Auto-generated method stub



@Override
public void show() 
    batch = new SpriteBatch();
    position = new Vector2(Gdx.graphics.getWidth() / 2, Gdx.graphics.getHeight() / 2);
    player = new Player(position);
    bild = new Texture("spongebob.png");


@Override
public void hide() 
    // TODO Auto-generated method stub



@Override
public void pause() 
    // TODO Auto-generated method stub



@Override
public void resume() 
    // TODO Auto-generated method stub



@Override
public void dispose() 
    batch.dispose();




Logcat

11-25 11:25:20.990: D/dalvikvm(862): Trying to load lib /data/app-lib/com.mygdx.game.android-2/libgdx.so 0xb1caad50
11-25 11:25:21.040: D/dalvikvm(862): Added shared lib /data/app-lib/com.mygdx.game.android-2/libgdx.so 0xb1caad50
11-25 11:25:21.040: D/dalvikvm(862): No JNI_OnLoad found in /data/app-lib/com.mygdx.game.android-2/libgdx.so 0xb1caad50, skipping init
11-25 11:25:21.100: D/AndroidRuntime(862): Shutting down VM
11-25 11:25:21.100: W/dalvikvm(862): threadid=1: thread exiting with uncaught exception (group=0xb1a73d70)
11-25 11:25:21.110: E/AndroidRuntime(862): FATAL EXCEPTION: main
11-25 11:25:21.110: E/AndroidRuntime(862): Process: com.mygdx.game.android, PID: 862
11-25 11:25:21.110: E/AndroidRuntime(862): java.lang.RuntimeException: Unable to start activity ComponentInfocom.mygdx.game.android/com.mygdx.game.android.AndroidLauncher: com.badlogic.gdx.utils.GdxRuntimeException: Libgdx requires OpenGL ES 2.0
11-25 11:25:21.110: E/AndroidRuntime(862):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2197)
11-25 11:25:21.110: E/AndroidRuntime(862):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2258)
11-25 11:25:21.110: E/AndroidRuntime(862):  at android.app.ActivityThread.access$800(ActivityThread.java:138)
11-25 11:25:21.110: E/AndroidRuntime(862):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1209)
11-25 11:25:21.110: E/AndroidRuntime(862):  at android.os.Handler.dispatchMessage(Handler.java:102)
11-25 11:25:21.110: E/AndroidRuntime(862):  at android.os.Looper.loop(Looper.java:136)
11-25 11:25:21.110: E/AndroidRuntime(862):  at android.app.ActivityThread.main(ActivityThread.java:5026)
11-25 11:25:21.110: E/AndroidRuntime(862):  at java.lang.reflect.Method.invokeNative(Native Method)
11-25 11:25:21.110: E/AndroidRuntime(862):  at java.lang.reflect.Method.invoke(Method.java:515)
11-25 11:25:21.110: E/AndroidRuntime(862):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
11-25 11:25:21.110: E/AndroidRuntime(862):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
11-25 11:25:21.110: E/AndroidRuntime(862):  at dalvik.system.NativeStart.main(Native Method)
11-25 11:25:21.110: E/AndroidRuntime(862): Caused by: com.badlogic.gdx.utils.GdxRuntimeException: Libgdx requires OpenGL ES 2.0
11-25 11:25:21.110: E/AndroidRuntime(862):  at com.badlogic.gdx.backends.android.AndroidGraphics.createGLSurfaceView(AndroidGraphics.java:122)
11-25 11:25:21.110: E/AndroidRuntime(862):  at com.badlogic.gdx.backends.android.AndroidGraphics.<init>(AndroidGraphics.java:102)
11-25 11:25:21.110: E/AndroidRuntime(862):  at com.badlogic.gdx.backends.android.AndroidGraphics.<init>(AndroidGraphics.java:95)
11-25 11:25:21.110: E/AndroidRuntime(862):  at com.badlogic.gdx.backends.android.AndroidApplication.init(AndroidApplication.java:133)
11-25 11:25:21.110: E/AndroidRuntime(862):  at com.badlogic.gdx.backends.android.AndroidApplication.initialize(AndroidApplication.java:99)
11-25 11:25:21.110: E/AndroidRuntime(862):  at com.mygdx.game.android.AndroidLauncher.onCreate(AndroidLauncher.java:14)
11-25 11:25:21.110: E/AndroidRuntime(862):  at android.app.Activity.performCreate(Activity.java:5242)
11-25 11:25:21.110: E/AndroidRuntime(862):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
11-25 11:25:21.110: E/AndroidRuntime(862):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2161)
11-25 11:25:21.110: E/AndroidRuntime(862):  ... 11 more

我是 Java 新手 所以我希望这是正确的部分:x

【问题讨论】:

在您的问题中显示崩溃的 logcat 输出。 【参考方案1】:

有些人有例外,logcat 说:

GdxRuntimeException: Libgdx requires OpenGL ES 2.0   

这是由于您的模拟器没有使用您的 gpu 进行图形处理,最好的解决方案是使用您的手机测试您的应用程序,但如果由于任何原因您不能,您可以像 @AngelAngel 一样应用此解决方案:libgdx android failed on launch . 出于某种原因(可能是opengl没有出现故障)以下错误的解决方案也可能对您有所帮助

 com.badlogic.gdx.utils.GdxRuntimeException: Error reading file: xxx.xxx

如果您仅在在 Android 上进行试验而在 Windows 上运行时遇到此错误,则可能是因为您的资产之一与您在代码中使用的名称不完全匹配。 Unix 区分大小写,因此 image.jpg 与 Image.jpg 不同。所以检查你必须的每一个资产,看看名字是否匹配!

【讨论】:

你的生活更安全 :D charackter_sprite.png 必须是 charackter_sprite.PNG 现在它可以工作了,非常感谢 :) @Opetion 你的答案是对的,我的建议是。 logcat那个对应的错误,还是有两个错误,输出log好像很奇怪,找不到文件,你不觉得吗? @AngelAngel 我相信 Fabi 有 2 个错误。第一个与我们在 logcat 中看到的内容有关(稍后提供)。所以你的答案是正确的,我认为你的答案是正确的。当没有 logcat 时,我“猜测”的第二个错误。疯狂的猜测,因为这不是我第一次发生在我身上,因为我一直在 Windows 中进行开发,并且曾经在我想在 Android 中测试时经常发生在我身上:) 这个错误不在 logcat 中,因为第一个错误. @Opetion 感谢您的回答,相信它可能会取悦那些疯狂的错误之一,logcat 显示了一件事,这是一个更简单的事情,哈哈 Fabi 一发子弹杀死两只鸟 Opetion if true,哈哈,是的,很有可能是fabi,继续找错误【参考方案2】:

你用模拟器吗?

libgdx android failed on launch

编辑:

选项

我告诉你什么,因为我发现了一个类似的问题,我把那个问题放下logcat,并发送这个响应,并且用户通过更改文件来解决,。 TTF 由。 ttf 并花了一些时间寻找错误,为什么说我发现日志令人困惑,但是我没有窗口,但我看到两者之间最显着的区别是这一行日志 11-28 21:10:37.617: D/libEGL(613): Emulator without GPU support detected. Fallback to software renderer.这个问题的日志没有列出来。也许当错误是仿真或缺少 OpenGL 时更像是 logcat 或第一个,而当通过大写和小写日志之间的差异找不到文件时,您更像是第二个,这表示在没有 GPU 支持的情况下检测到模拟器。我希望我完全理解我的英语不好

logcat 这个问题; FATAL EXCEPTION : main - My app doesn't work on android devices anymore, but works on desktop

11-28 21:10:37.517: D/dalvikvm(613): Trying to load lib /data/data/com.premier.jeu.android/lib/libgdx.so 0x411998b0
11-28 21:10:37.527: D/dalvikvm(613): Added shared lib /data/data/com.premier.jeu.android/lib/libgdx.so 0x411998b0
11-28 21:10:37.527: D/dalvikvm(613): No JNI_OnLoad found in /data/data/com.premier.jeu.android/lib/libgdx.so 0x411998b0, skipping init
11-28 21:10:37.617: D/libEGL(613): Emulator without GPU support detected. Fallback to software renderer.
11-28 21:10:37.627: D/libEGL(613): loaded /system/lib/egl/libGLES_android.so
11-28 21:10:37.646: D/AndroidRuntime(613): Shutting down VM
11-28 21:10:37.646: W/dalvikvm(613): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
11-28 21:10:37.656: E/AndroidRuntime(613): FATAL EXCEPTION: main
11-28 21:10:37.656: E/AndroidRuntime(613): java.lang.RuntimeException: Unable to start activity ComponentInfocom.premier.jeu.android/com.premier.jeu.android.AndroidLauncher: com.badlogic.gdx.utils.GdxRuntimeException: Libgdx requires OpenGL ES 2.0
11-28 21:10:37.656: E/AndroidRuntime(613):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
11-28 21:10:37.656: E/AndroidRuntime(613):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
11-28 21:10:37.656: E/AndroidRuntime(613):  at android.app.ActivityThread.access$600(ActivityThread.java:130)
11-28 21:10:37.656: E/AndroidRuntime(613):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
11-28 21:10:37.656: E/AndroidRuntime(613):  at android.os.Handler.dispatchMessage(Handler.java:99)
11-28 21:10:37.656: E/AndroidRuntime(613):  at android.os.Looper.loop(Looper.java:137)
11-28 21:10:37.656: E/AndroidRuntime(613):  at android.app.ActivityThread.main(ActivityThread.java:4745)
11-28 21:10:37.656: E/AndroidRuntime(613):  at java.lang.reflect.Method.invokeNative(Native Method)
11-28 21:10:37.656: E/AndroidRuntime(613):  at java.lang.reflect.Method.invoke(Method.java:511)
11-28 21:10:37.656: E/AndroidRuntime(613):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
11-28 21:10:37.656: E/AndroidRuntime(613):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
11-28 21:10:37.656: E/AndroidRuntime(613):  at dalvik.system.NativeStart.main(Native Method)
11-28 21:10:37.656: E/AndroidRuntime(613): Caused by: com.badlogic.gdx.utils.GdxRuntimeException: Libgdx requires OpenGL ES 2.0
11-28 21:10:37.656: E/AndroidRuntime(613):  at com.badlogic.gdx.backends.android.AndroidGraphics.createGLSurfaceView(AndroidGraphics.java:122)
11-28 21:10:37.656: E/AndroidRuntime(613):  at com.badlogic.gdx.backends.android.AndroidGraphics.<init>(AndroidGraphics.java:102)
11-28 21:10:37.656: E/AndroidRuntime(613):  at com.badlogic.gdx.backends.android.AndroidGraphics.<init>(AndroidGraphics.java:95)
11-28 21:10:37.656: E/AndroidRuntime(613):  at com.badlogic.gdx.backends.android.AndroidApplication.init(AndroidApplication.java:133)
11-28 21:10:37.656: E/AndroidRuntime(613):  at com.badlogic.gdx.backends.android.AndroidApplication.initialize(AndroidApplication.java:99)
11-28 21:10:37.656: E/AndroidRuntime(613):  at com.premier.jeu.android.AndroidLauncher.onCreate(AndroidLauncher.java:16)
11-28 21:10:37.656: E/AndroidRuntime(613):  at android.app.Activity.performCreate(Activity.java:5008)
11-28 21:10:37.656: E/AndroidRuntime(613):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
11-28 21:10:37.656: E/AndroidRuntime(613):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
11-28 21:10:37.656: E/AndroidRuntime(613):  ... 11 more
11-28 21:10:39.476: I/Process(613): Sending signal. PID: 613 SIG: 9

【讨论】:

@Opetion haha​​ 以前没有 logcat @Opetion 不知道,那个人有那个错误并且修复得很好,我能想到的一件事是,也许,windows 可能无法摆脱 case-sensitive 错误,而找到它的人就是 OpenGL 和启动异常,好像任何事情都出错了,所以如果我在 Windows 中,我会很惊讶 :) PS:如果你想删除任何 cmets 不离开,这很脏哈哈。 @AngelAngel 我没有什么可隐瞒的!不会删除任何东西:P @Opetion 你的答案现在已经完成了哈哈投票:) logcat 这个问题;尝试编辑之前的标题,但不要让我在磁贴中添加 FATAL EXCEPTION,这样您就可以找到遇到同样问题的其他人 @AngelAngel 希望是!并且减少了 100% 的疯狂猜测! :) 谢了哥们! ^^ 我已经为你投票了,所以我无能为力了。

以上是关于android 的 libGDX 动画的主要内容,如果未能解决你的问题,请参考以下文章

有没有比 Libgdx 更好的 2D 游戏引擎? [关闭]

Android技术分享| Activity 过渡动画 — 让切换更加炫酷

Android Studio App 在使用 Libgdx 打开之前就停止工作

LibGDX:向现有 3d 模型添加新动画

纹理包装动画图像/精灵表有效-Libgdx

Android 动画解释 - XML