I am coding a game in libgdx. While adding the background I used the html module to watch the results fast and easy on my computer. But when I try to see it on my phone I just get a black screen. My project is on GitHub.

My Gamescreen.java

package com.joelbrun.jetskirider.screens;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.InputAdapter;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.GL20;
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;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.physics.box2d.Body;
import com.badlogic.gdx.physics.box2d.BodyDef;
import com.badlogic.gdx.physics.box2d.Box2DDebugRenderer;
import com.badlogic.gdx.physics.box2d.Contact;
import com.badlogic.gdx.physics.box2d.ContactImpulse;
import com.badlogic.gdx.physics.box2d.ContactListener;
import com.badlogic.gdx.physics.box2d.Fixture;
import com.badlogic.gdx.physics.box2d.FixtureDef;
import com.badlogic.gdx.physics.box2d.Manifold;
import com.badlogic.gdx.physics.box2d.Shape;
import com.badlogic.gdx.physics.box2d.World;
import com.badlogic.gdx.scenes.scene2d.ui.Label;
import com.badlogic.gdx.utils.Scaling;
import com.badlogic.gdx.utils.viewport.ScalingViewport;
import com.badlogic.gdx.utils.viewport.Viewport;
import com.joelbrun.jetskirider.buoyancy.Box2DFactory;
import com.joelbrun.jetskirider.buoyancy.BuoyancyController;
import com.joelbrun.jetskirider.utilities.ParallaxBackground;
import com.joelbrun.jetskirider.utilities.ParallaxLayer;

public class Gamescreen extends InputAdapter implements Screen, ContactListener {

    private static final float TIMESTEP = 1.0f / 60.0f;
    private static final int VELOCITY_ITERATIONS = 8;
    private static final int POSITION_ITERATIONS = 3;
    public static final float GAMESCREEN_WIDTH = 20;
    public static final float GAMESCREEN_HEIGHT = 20 * (Gdx.graphics.getHeight() / (float) Gdx.graphics.getWidth());
    public static final int OBSTACLE_TYPES = 5;
    public static final float WATER_HEIGHT = 5; //ToDo: Change to about 5
    public static final float WATER_WIDTH = GAMESCREEN_WIDTH;
    private static final float JETSKI_BOX_X = 1.5f;
    private static final float JETSKI_BOX_Y = 1;

    private World world;
    private Box2DDebugRenderer debugRenderer;
    public Texture jetski;
    public TextureRegion wave;
    public TextureRegion background;
    public SpriteBatch batch;
    public OrthographicCamera camera;
    public Label score;
    Viewport viewport;
    private BuoyancyController buoyancyController;
    private ParallaxBackground bkground;

    public void show() {

        world = new World(new Vector2(0, -9.81f), true);
        debugRenderer = new Box2DDebugRenderer();

        Texture[] texture = new Texture[OBSTACLE_TYPES];

        for (int i=0; i<OBSTACLE_TYPES; i++){
            texture[i] = new Texture(Gdx.files.internal("game/obstacles/obstacle" + Integer.toString(i+1)+".png"));
        jetski = new Texture("game/jetski.png");
        wave = new TextureRegion(new Texture("game/water1.png"));
        batch = new SpriteBatch();
        background = new TextureRegion(new Texture(Gdx.files.internal("game/background.png")));

        //Camera & Viewport
        camera = new OrthographicCamera(GAMESCREEN_WIDTH, GAMESCREEN_HEIGHT);

        viewport = new ScalingViewport(Scaling.fillY, GAMESCREEN_WIDTH, GAMESCREEN_HEIGHT, camera);
        camera.position.set(GAMESCREEN_WIDTH / 2, GAMESCREEN_HEIGHT / 2, 0);



        Shape shape = Box2DFactory.createBoxShape(WATER_WIDTH, WATER_HEIGHT / 2, new Vector2(0, 0), 0);
        FixtureDef fixtureDef = Box2DFactory.createFixture(shape, 2f, 0.1f, 0f, true);
        Body water = Box2DFactory.createBody(world, BodyDef.BodyType.StaticBody, fixtureDef, new Vector2(0, 0));

        buoyancyController = new BuoyancyController(world, water.getFixtureList().first());

        Shape groundShape = Box2DFactory.createChainShape(new Vector2[]{
                new Vector2(0, -1.8f),
                new Vector2(20, -1.8f)
        FixtureDef fixtureDefGround = Box2DFactory.createFixture(groundShape, 2, 0, 0.2f, false);
        Box2DFactory.createBody(world, BodyDef.BodyType.StaticBody, fixtureDefGround, new Vector2(0, 2));

        Shape jetskiShape = Box2DFactory.createBoxShape(JETSKI_BOX_X, JETSKI_BOX_Y /2, new Vector2(0, 0), 0);
        FixtureDef fixtureDef1 = Box2DFactory.createFixture(jetskiShape, 0.9f, 0.5f, 0.5f, false);
        Box2DFactory.createBody(world, BodyDef.BodyType.DynamicBody, fixtureDef1, new Vector2(2, WATER_HEIGHT/2));

        //Background Scrolling
        bkground = new ParallaxBackground(new ParallaxLayer[]{
                new ParallaxLayer(background, new Vector2(1,0), new Vector2(0, 0)),
                new ParallaxLayer(wave, new Vector2(1,0), new Vector2(0, 0))
        }, Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), new Vector2(150, 0));

    public void render(float delta) {
        Gdx.gl.glClearColor(1, 1, 1, 1);


        debugRenderer.render(world, camera.combined);




    public void resize(int width, int height) {
        int SCREEN_WIDTH = width;
        int SCREEN_HEIGHT = height;

        viewport.setWorldSize(GAMESCREEN_WIDTH, GAMESCREEN_HEIGHT);
        viewport.update(SCREEN_WIDTH, SCREEN_HEIGHT,true);

    public void pause() {


    public void resume() {


    public void hide() {

    public void dispose() {

    public void beginContact(Contact contact) {
        Fixture fixtureA = contact.getFixtureA();
        Fixture fixtureB = contact.getFixtureB();

        if (fixtureA.isSensor()
                && fixtureB.getBody().getType() == BodyDef.BodyType.DynamicBody) {
        } else if (fixtureB.isSensor()
                && fixtureA.getBody().getType() == BodyDef.BodyType.DynamicBody) {

    public void endContact(Contact contact) {
        Fixture fixtureA = contact.getFixtureA();
        Fixture fixtureB = contact.getFixtureB();

        if (fixtureA.isSensor()
                && fixtureB.getBody().getType() == BodyDef.BodyType.DynamicBody) {
        } else if (fixtureB.isSensor()
                && fixtureA.getBody().getType() == BodyDef.BodyType.DynamicBody) {
            if (fixtureA.getBody().getWorldCenter().y > -1) {

    public void preSolve(Contact contact, Manifold oldManifold) {


    public void postSolve(Contact contact, ContactImpulse impulse) {

  • 1
    \$\begingroup\$ It's not actually related to your question but your code is such a mess. Don't use one class for everything from physics to rendering. It's a clear example of Blob antipattern sourcemaking.com/antipatterns/the-blob \$\endgroup\$ Aug 27, 2015 at 18:35

2 Answers 2


Allright I found the solutions. My phone was only capable of processing pictures with a size up to 4096*4096px and my Sprite was over 5000px...


Here goes some useful information for your problem related to texture resolutions: http://answers.unity3d.com/questions/563094/mobile-max-texture-size.html


You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .