2013-06-15 2 views
1

Je fais un jeu dans Libgdx, dans lequel je veux faire tomber une balle d'un mot à l'autre et déplacer l'arrière-plan vers le haut mot et mettre à jour la caméra en fonction de cela. Mon code est donné ci-dessous ...Comment déplacer l'écran d'arrière-plan dans libgdx?

public WorldRenderer(SpriteBatch spriteBatch, World world){ 
    this.world = world; 
    this.camera = new OrthographicCamera(FRUSTUM_WIDTH, FRUSTUM_HEIGHT); 
    this.camera.position.set(FRUSTUM_WIDTH/2, FRUSTUM_HEIGHT/2, 0); 
    this.spriteBatch = spriteBatch; 
    positionBGY1 = 0; 
    positionBGY2 = 0; 

} 
public void render(World world, float deltaTime){ 
    if(world.ball.position.y > - camera.position.y){ 
    camera.position.y = world.ball.position.y; 

    } 

    if(camera.position.y<0) 
    camera.position.y=world.ball.position.y; 

    camera.update(); 
    spriteBatch.setProjectionMatrix(camera.combined); 
    renderBackground(); 
    renderObjects(world, deltaTime); 
} 


private void calculateBGPosition(){ 
    positionBGY2 = positionBGY1 + (int)FRUSTUM_HEIGHT; 
    if(camera.position.y >= positionBGY2){ 
    positionBGY1 = positionBGY2; 
    } 
} 
private void renderBackground() { 
    spriteBatch.disableBlending(); 
    spriteBatch.begin(); 
    spriteBatch.draw(Assets.gamebackgroundRegion, camera.position.x - FRUSTUM_WIDTH/2, positionBGY1 - FRUSTUM_HEIGHT/2, FRUSTUM_WIDTH, 1.5f * FRUSTUM_HEIGHT); 
    spriteBatch.draw(Assets.gamebackgroundRegion2, camera.position.x - FRUSTUM_WIDTH/2, positionBGY2 - FRUSTUM_HEIGHT/2, FRUSTUM_WIDTH, 1.5f * FRUSTUM_HEIGHT); 
    calculateBGPosition(); 
    spriteBatch.end(); 
    } 

problème avec mon code est un écran de fond ne bouge pas et la caméra ne sont pas mis à jour avec le mouvement de balle tomber hors de l'écran.

Répondre

1

Eh bien, la première chose que vous devez faire est de changer l'une des variables bg, donc en rendre somehwere faire quelque chose comme:

float speed = 1; 
positionBGY1+=deltaTime*speed; 
positionBGY2+=deltaTime*speed; 

En ce qui concerne la caméra en mouvement avec le ballon, je voudrais juste faire ceci:

camera.position.y = Math.min(ball.y,0); 

Et je à son tour omettre tout cela:

if(world.ball.position.y > - camera.position.y){ 
    camera.position.y = world.ball.position.y; 
} 

if(camera.position.y<0) 
    camera.position.y=world.ball.position.y; 
+0

Salut, merci pour votre aide. J'ai déjà compris mon problème. –

0

la meilleure façon d'y parvenir est en utilisant des classes ParrallaxLayer et ParrallaxBackground

il optimise le fonctionnement de fond afin que u n'avez pas à vous soucier de la performance