2017-02-03 2 views
0

Ich habe ein Problem, eine Gesundheitsbalken für meine feindlichen Texturen in der richtigen Position, wenn das Spiel beginnt und die Kamera nicht bewegt hat und den Bildschirm sehen port:Health Bar Texturen bewegen sich schneller als Spieler, wenn die Kamera vom Startpunkt aus bewegt

FitViewport (GameConfig.WIDTH/GameConfig.PPM, GameConfig.HEIGHT/ GameConfig.PPM, GameCam);

nicht geändert hat, die Balken korrekt auf die Feinde bleiben, aber wenn der Spieler geht die Hälfte des Bildschirms passieren und die Kamera beginnt er die Stäbe selbst wenn die Feinde bewegen sich nicht zu bewegen beginnen zu folgen.

Und wenn der Spieler in einem bestimmten Abstand von den Feinden bekommt, wird ihr Verhalten Ankunft gesetzt und sie aufzuspüren auch die Spieler veranlassen, die Gesundheit Bars weiter weg vom Schirm zu bewegen: here is the health bar off screen when the camera and enemies starts to move

public void drawHealthBar(SpriteBatch batch){ 
    batch.begin(); 
    batch.draw(wHB, 
      (this.getX() * GameConfig.PPM) + 20, (this.getY() * GameConfig.PPM) + 35 , 
      (Gdx.graphics.getWidth()/15) * wolfHealth, 8); 
    batch.draw(gHB, 
      (this.getX() * GameConfig.PPM) + 20, (this.getY() * GameConfig.PPM) + 35 , 
      (Gdx.graphics.getWidth()/15) * 1, 8); 
    batch.end(); 
} 

wHB und gHB sind die Health-Bar-Textur Regionen, hat jemand eine Idee, warum das passieren würde?

Hier ist die Render-Funktion in meinem Play-Screen-Klasse, wo die Gesundheitsleiste jedes wolfbeast Feind gezeichnet wird:

public void render(float delta) { 
    update(delta); 
    Gdx.gl.glClearColor(1,0,0,1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
    // render map 
    renderer.render(); 

    // render map bodies 
    //box2DDebugRenderer.render(world, gameCam.combined); 

    game.getBatch().setProjectionMatrix(gameCam.combined); 
    game.getBatch().begin(); 
    player.draw(game.getBatch()); 
    for(WolfBeast wolfBeast: wolfEnemies){ 
     wolfBeast.draw(game.getBatch()); 
    } 
    for(WaterBlast waterBlast: waterBlasts) { 
     waterBlast.draw(game.getBatch()); 
    } 
    game.getBatch().end(); 

    hud.stage.draw(); 

    for(WolfBeast wolfBeast: wolfEnemies){ 

     if(wolfBeast.wolfHealth > .6) 
      game.getBatch().setColor(Color.GREEN); 
     else if(wolfBeast.wolfHealth > .2) 
      game.getBatch().setColor(Color.ORANGE); 
     else 
      game.getBatch().setColor(Color.RED); 

     wolfBeast.drawHealthBar(game.getBatch()); 
     game.getBatch().setColor(Color.WHITE); 
    } 

    if(Gdx.app.getType() == Application.ApplicationType.Android) { 
     moveButtons.drawButtons(); 
    } 


} 

Lassen Sie mich wissen, wenn Sie weitere Informationen benötigen, und ich werde liefern. Ich denke, das Problem ist, wie ich meine Welt mit PPM skalieren kann, kann mir bitte jemand sagen, was los ist und wie ich das beheben kann?

public void update(float dt){ 
    stateTimer += dt; 
    int playerXpos = (int) player.pBody.getPosition().x; 
    int wolfBodyXpos = (int) this.eBody.getPosition().x; 
    //System.out.println("playerXpos: " + playerXpos + " " + "wolfXpos: " + wolfBodyXpos); 
    if (abs(playerXpos - wolfBodyXpos) >= 3.5f) { 
     Arrive<Vector2> arriveSB = new Arrive<Vector2>(entity, target) 
       .setTimeToTarget(.01f) 
       .setArrivalTolerance(2.5f) 
       .setDecelerationRadius(100); 
     entity.setBehavior(arriveSB); 
    } 
    else { 
     entity.setBehavior(null); 
    } 

    setPosition(eBody.getPosition().x - getWidth()/2, eBody.getPosition().y - getHeight()/2); 
    setRegion(getFrame(dt)); 
    entity.update(dt); 
} 

Auch wenn ich die Zeile aus kommentieren, dass die Kamera ermöglicht dem Spieler, und die Kamera folgt nicht bewegen, bleiben die Gesundheit Bars korrekt auf die Feinde. Es macht keinen Sinn, sollten sich die Balken nicht bewegen, wenn sich die Gegner bewegen when camera movement is off?

+0

Verwenden Sie StretchViewport, wenn Ihr Spiel box2D – Aryan

+0

Warum diese Zeile game.getBatch(). setProjectionMatrix (hud.stage.getCamera(). kombiniert); – Aryan

+0

entfernt diese Zeile aber immer noch keine Änderungen – kingx26

Antwort

0

Das Problem war meine Projektionsmatrix. Ich war für Sprite eine andere Projektion und eine andere für Körper, der ist, warum sie an verschiedenen speeds.This bewegt funktioniert am besten:

batch.draw(getFrame(dt), 
      pBody.getPosition().x,pBody.getPosition().y, 
      1,1, 
      1, 1, 
      1,1 , 
      0 
      ); 

Dies funktioniert für mich:

public void drawHealthBar(SpriteBatch batch){ 
    batch.draw(wHB, 
      eBody.getPosition().x - .4f, 
      eBody.getPosition().y + .2f, 
      .7f * wolfHealth, .12f 
       ); 
    batch.draw(gHB, 
      eBody.getPosition().x - .4f, 
      eBody.getPosition().y + .2f, 
      .7f, .12f 
       ); 
} 

Anpassungen vornehmen, um Werte basieren auf die Größe Ihrer Vermögenswerte und Ihre Skalierung

Verwandte Themen