問題描述
如果我為桌面啟動它,它運行得非常好,但在我的 Android 導出后它在我啟動應用程序后立即崩潰.
If I start it for Desktop it runs pretty nice, but after the export for my Android it crashes right after I start the application.
所以我的問題...:
它適用于桌面但不適用于我的 Android 有什么問題?
What's wrong that it works for the Desktop but not for my 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 ComponentInfo{com.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
I'm pretty new in Java so I hope it's the right part :x
推薦答案
已經有一些人出現異常,logcat 說:
There has been some persons with exceptions where the logcat says:
GdxRuntimeException: Libgdx requires OpenGL ES 2.0
這是由于您的模擬器沒有使用您的 gpu 進行圖形處理,最好的解決方案是使用您的手機測試您的應用程序,但如果由于任何原因您不能,您可以像 @AngelAngel 一樣應用此解決方案:libgdx android 啟動失敗.
出于某種原因(可能是opengl沒有出現故障)以下錯誤的解決方案也可能對您有所幫助
This is due to your emulator not using your gpu for graphics and the best solution would be to use your phone to test your application but if for any reason you can't you can as @AngelAngel apply this solution: libgdx android failed on launch.
For some reason ( probably the opengl not glitching ) the solution to the following error might also help you
com.badlogic.gdx.utils.GdxRuntimeException: Error reading file: xxx.xxx
如果您僅在 Android 上進行試驗而在 Windows 上運行時遇到此錯誤,則可能是因為您的資產之一與您在代碼中使用的名稱不完全匹配.Unix 區分大小寫,因此 image.jpg 與 Image.jpg 不同.所以檢查你必須的每一個資產,看看名字是否匹配!
If you have this error only while experimenting in Android while it works on Windows it probably is because one of your assets doesn't exactly match the name you used on your code. Unix is case-sensative so image.jpg is different from Image.jpg . So check every asset you have to see if the names match!
這篇關于android 的 libGDX 動畫的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!