Search code examples
javaandroidlibgdx

Displaying a simple texture image with camera and viewport


Following instructions from a book that had great reviews on amazon, but I am having trouble with the very first example. The book title is "Lbgdx Cross-platform Game Development CookBook".

This is the code, it doesn't seem to compile on my phone for some strange reason, and the errors I get on android studio are on the main thread and activity and main.

public class CookBook implements ApplicationListener {

private static final Color BACKGROUND_COLOR = new Color(0.39f, 0.58f, 0.92f, 1.0f);
private static final float WORLD_TO_SCREEN = 1.0f / 100.0f;
private static final float SCENE_WIDTH = 12.80f;
private static final float SCENE_HEIGHT = 7.20f;

private OrthographicCamera camera;
private Viewport viewport;
private SpriteBatch batch;
private Texture cavemanTexture;

@Override
public void create() {
    camera = new OrthographicCamera();
    viewport = new FitViewport(SCENE_WIDTH, SCENE_HEIGHT, camera);
    batch = new SpriteBatch();

    cavemanTexture = new Texture(Gdx.files.internal("caveman.png"));
    cavemanTexture.setFilter(TextureFilter.Nearest, TextureFilter.Nearest);
}

@Override
public void dispose() {
    batch.dispose();
    cavemanTexture.dispose();
}

@Override
public void render() {
    Gdx.gl.glClearColor(BACKGROUND_COLOR.getRed(), BACKGROUND_COLOR.getGreen(),
            BACKGROUND_COLOR.getBlue(), BACKGROUND_COLOR.getAlpha());
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    batch.setProjectionMatrix(camera.combined);

    batch.begin();
    int width = cavemanTexture.getWidth();
    int height = cavemanTexture.getHeight();
    float originX = width * 0.5f;
    float originY = width * 0.5f;
    batch.draw(cavemanTexture,
            -originX, -originY,
            originX, originY,
            width, height,
            WORLD_TO_SCREEN, WORLD_TO_SCREEN,
            0.0f,
            0, 0,
            width, height,
            false, false);
    batch.end();
}

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

@Override
public void pause() {
}

@Override
public void resume() {
}

}

UPDATE (Errors) The error messages that I get in the logcat are:

java.lang.ExceptionInInitializerError
at com.mygdx.game.android.AndroidLauncher.onCreate(AndroidLauncher.java:14)
at android.app.Activity.performCreate(Activity.java:5008)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
at android.app.ActivityThread.access$600(ActivityThread.java:130)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NoClassDefFoundError: java.awt.Color
at com.mygdx.game.CookBook.<clinit>(CookBook.java:16)
at com.mygdx.game.android.AndroidLauncher.onCreate(AndroidLauncher.java:14)
at android.app.Activity.performCreate(Activity.java:5008)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
at android.app.ActivityThread.access$600(ActivityThread.java:130)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invokeNative(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)

Solution

  • you probably did not include the Color class in you file that you are using here:

        private static final Color BACKGROUND_COLOR = new Color(0.39f, 0.58f, 0.92f, 1.0f);
    

    Just add

       import com.badlogic.gdx.graphics.Color;
    

    Instead of awt.Color at the beggining of the file