0

libGDX (その他の情報: Eclipse、Windows 8) で Texturepacker を使用して、単純な 18 フレームのアニメーションを作成しようとしています。

次の 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 などとして参照します。

以前、OpenGL に関連付けられた行と、カメラ設定に関連付けられた行を示すエラーが発生していました。私はそれらを解決したように見えましたが、おそらくこれは関連していますか?

ありがとう。

4

1 に答える 1

1

バッチを初期化していません。
batch = new SpriteBatch();
create() メソッドに挿入します。
this とは別に、コード
float dt = Gdx.graphics.getDeltaTime(); animationElapsed += dt; while(animationElapsed > frameLength){ animationElapsed -= frameLength; currentFrame = (currentFrame == test.size - 1) ? 0 : ++currentFrame; }
は render() 内に配置する必要があります。

于 2014-02-20T03:44:10.913 に答える