【发布时间】:2013-12-29 09:51:55
【问题描述】:
我正在尝试在 libgdx 中使用精灵表制作一个简单的动画,一个正在移动双腿的小人。这是代码:
package com.pro.schoolrun;
import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
public class SchoolRun implements ApplicationListener {
Texture player;
TextureRegion[] regions;
SpriteBatch batch;
OrthographicCamera camera;
int i;
@Override
public void create() {
i = 0;
player = new Texture(Gdx.files.internal("data/spritesheet.png"));
regions[0] = new TextureRegion(player, 0, 0, player.getWidth() / 4,
player.getHeight() / 2);
regions[1] = new TextureRegion(player, 64, 0, player.getWidth() / 4,
player.getHeight() / 2);
regions[2] = new TextureRegion(player, 128, 0, player.getWidth() / 4,
player.getHeight() / 2);
regions[3] = new TextureRegion(player, 192, 0, player.getWidth() / 4,
player.getHeight() / 2);
regions[4] = new TextureRegion(player, 0, 128, player.getWidth() / 4,
player.getHeight() / 2);
regions[5] = new TextureRegion(player, 64, 128, player.getWidth() / 4,
player.getHeight() / 2);
regions[6] = new TextureRegion(player, 128, 128, player.getWidth() / 4,
player.getHeight() / 2);
regions[7] = new TextureRegion(player, 192, 128, player.getWidth() / 4,
player.getHeight() / 2);
camera = new OrthographicCamera();
camera.setToOrtho(false, 800, 400);
batch = new SpriteBatch();
}
@Override
public void dispose() {
player.dispose();
batch.dispose();
}
@Override
public void render() {
Gdx.gl.glClearColor(0, 0, 0.2f, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
camera.update();
batch.setProjectionMatrix(camera.combined);
while (true) {
batch.begin();
if (i > 7) {
i = -1;
i++;
} else {
i++;
}
batch.draw(regions[i], Gdx.graphics.getWidth() / 2,
Gdx.graphics.getHeight() / 2);
batch.end();
}
}
@Override
public void resize(int width, int height) {
}
@Override
public void pause() {
}
@Override
public void resume() {
}
}
但是当我在 android 上运行它时,它在第 24 行(在区域 [0])给了我一个 NullPointer 异常。这是 MainActivity 类:
package com.pro.schoolrun;
import android.os.Bundle;
import com.badlogic.gdx.backends.android.AndroidApplication;
import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration;
public class MainActivity extends AndroidApplication {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration();
cfg.useGL20 = true;
cfg.useAccelerometer=false;
cfg.useCompass = false;
initialize(new SchoolRun(), cfg);
}
}
【问题讨论】:
-
需要注意的一点是,您的渲染方法中不需要 while 循环。它会被自动调用。
标签: java android animation libgdx