package com.digitalwolf.parallaxbackground; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.math.Vector2; public class ParallaxBackground { private ParallaxLayer[] layers; private OrthographicCamera camera; private SpriteBatch batch; private Vector2 speed = new Vector2(); /** * @param layers The background layers * @param width The screenWith * @param height The screenHeight * @param speed A Vector2 attribute to point out the x and y speed */ public ParallaxBackground(ParallaxLayer[] layers,float width,float height,Vector2 speed){ this.layers = layers; this.speed.set(speed); this.camera = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); this.batch = new SpriteBatch(); } public void render(float delta){ this.camera.position.add(speed.x*delta,speed.y*delta, 0); for(ParallaxLayer layer:layers){ batch.setProjectionMatrix(camera.projection); batch.begin(); float currentX = - camera.position.x*layer.parallaxRatio.x % ( layer.region.getRegionWidth() + layer.padding.x) ; if( speed.x < 0 )currentX += -( layer.region.getRegionWidth() + layer.padding.x); do{ float currentY = - camera.position.y*layer.parallaxRatio.y % ( layer.region.getRegionHeight() + layer.padding.y) ; if( speed.y < 0 )currentY += - (layer.region.getRegionHeight()+layer.padding.y); do{ batch.draw(layer.region, -this.camera.viewportWidth/2+currentX + layer.startPosition.x , -this.camera.viewportHeight/2 + currentY +layer.startPosition.y); currentY += ( layer.region.getRegionHeight() + layer.padding.y ); }while( currentY < camera.viewportHeight); currentX += ( layer.region.getRegionWidth()+ layer.padding.x); } while( currentX < camera.viewportWidth); batch.end(); } } }