2014-02-20 39 views
0

我想用libGDX(其他信息:Eclipse,Windows 8)使用Texturepacker产生一个简单的18帧动画。Texturepacker/LibGDX动画 - 渲染错误

我得到以下logcat的错误,再加上我的Android试验装置在黑色屏幕:

02-20 09:26:15.229: E/AndroidRuntime(23444): FATAL EXCEPTION: GLThread 
02-20 09:26:15.229: E/AndroidRuntime(23444): java.lang.NullPointerException 
02-20 09:26:15.229: E/AndroidRuntime(23444): at com.tester.test.TestGameClass.render(TestGameClass.java:71) 
02-20 09:26:15.229: E/AndroidRuntime(23444): at com.badlogic.gdx.backends.android.AndroidGraphics.onDrawFrame(AndroidGraphics.java:499) 
02-20 09:26:15.229: E/AndroidRuntime(23444): at com.badlogic.gdx.backends.android.surfaceview.GLSurfaceViewCupcake$GLThread.guardedRun(GLSurfaceViewCupcake.java:713) 
02-20 09:26:15.229: E/AndroidRuntime(23444): at com.badlogic.gdx.backends.android.surfaceview.GLSurfaceViewCupcake$GLThread.run(GLSurfaceViewCupcake.java:646) 

的logcat的错误似乎指向我的游戏类的渲染部分:

import com.badlogic.gdx.ApplicationListener; 
import com.badlogic.gdx.Gdx; 
import com.badlogic.gdx.assets.AssetManager; 
import com.badlogic.gdx.audio.Music; 
import com.badlogic.gdx.audio.Sound; 
import com.badlogic.gdx.graphics.GL10; 
import com.badlogic.gdx.graphics.OrthographicCamera; 
import com.badlogic.gdx.graphics.Texture; 
import com.badlogic.gdx.graphics.g2d.Sprite; 
import com.badlogic.gdx.graphics.g2d.SpriteBatch; 
import com.badlogic.gdx.graphics.g2d.TextureAtlas; 
import com.badlogic.gdx.utils.Array; 

public class TestGameClass implements ApplicationListener { 

AssetManager manager = new AssetManager(); 
Texture grey_background; 
Texture tell_arrow; 
Texture test_anni_1; 
Music test_intro; 
Music test_play; 
Sound menu_select; 
OrthographicCamera camera; 
SpriteBatch batch; 
TextureAtlas spriteSheet; 
private Array<Sprite> test; 
private int currentFrame; 
private float frameLength; 
private float animationElapsed; 

@Override 
    public void create() { 

    Texture.setEnforcePotImages(false); 
    grey_background = new Texture(Gdx.files.internal("grey_background.png")); 
    tell_arrow = new Texture(Gdx.files.internal("tell_arrow.png")); 
    test_intro = Gdx.audio.newMusic(Gdx.files.internal("test_intro.mp3")); 
    test_play = Gdx.audio.newMusic(Gdx.files.internal("test_play.mp3")); 
    menu_select = Gdx.audio.newSound(Gdx.files.internal("menu_select.wav")); 

    test_intro.setLooping(true); 
    test_intro.play(); 

    camera = new OrthographicCamera(); 
    camera.setToOrtho(false, 480, 640); 

    spriteSheet = new TextureAtlas(Gdx.files.internal("spritesheet.txt")); 
    test = spriteSheet.createSprites("test"); 

    for(int i=0; i<test.size; i++){ 
     test.get(i).setSize(3.0f, 3.0f); 
    } 

    float dt = Gdx.graphics.getDeltaTime(); 
    animationElapsed += dt; 
    while(animationElapsed > frameLength){ 
     animationElapsed -= frameLength; 
     currentFrame = (currentFrame == test.size - 1) ? 0 : ++currentFrame; 
    } 

    } 

    @Override 
    public void render() { 
     Gdx.gl.glClearColor(0, 0, 0.2f, 1); 
      Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 

     camera.update(); 
     batch.begin(); 
     test.get(currentFrame).draw(batch); 
     batch.end(); 
     } 

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

    public void pause() { 
    } 

    public void resume() { 
    } 

    public void dispose() { 
     grey_background.dispose(); 
     menu_select.dispose(); 
     test_intro.dispose(); 
     test_play.dispose(); 
     tell_arrow.dispose(); 
     batch.dispose(); 
    } 
} 

我Texturepacker PNG图像和文本文件是指每个测试帧为Test1,TEST2,TEST3等

我以前获得该指着线assoc命令错误使用OpenGL,单独使用与相机设置相关的线。我似乎已经解决了他们,但也许这是相关的?

谢谢。

+1

错误指向第71行,并解释您有一个空指针。应该相当容易找出,但如果你需要额外的帮助,你可以考虑共享哪条线实际上是71 ...疯狂猜测; test为null或test.get(..)返回null。 –

+0

Hi Marius,第71行指向batch.begin(); – jdubbing

回答

1

你有havnt初始化批处理。在您的create()方法中插入
batch = new SpriteBatch();

除了这个,你的代码
float dt = Gdx.graphics.getDeltaTime(); animationElapsed += dt; while(animationElapsed > frameLength){ animationElapsed -= frameLength; currentFrame = (currentFrame == test.size - 1) ? 0 : ++currentFrame; }
应放在render()。

+0

感谢Pranav-我不再在LogCat中发现任何错误。我仍然看不到屏幕上的动画(单独的问题)。我猜这可能是我的相机设置,但我似乎无法修复它。 – jdubbing

+1

使用batch.setProjectionMatrix(camera.combined);在render()中。其次你havnt初始化frameLength的任何价值。第三,你为什么不使用libgdx中提供的Animation类对象绘制动画。如果您是libgdx中的新成员,并且没有关于动画类的信息,请查看http://code.google.com/p/libgdx/wiki/SpriteAnimation – Pranav008

+0

感谢Pranav。我在一小时前发现了您在链接中提到的教程(比我使用的其他教程更容易遵循)。我已经放弃了它,它可以与我自己的图形一起工作。我现在有一个非常流畅的动画,欢呼。 – jdubbing