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?
Verwenden Sie StretchViewport, wenn Ihr Spiel box2D – Aryan
Warum diese Zeile game.getBatch(). setProjectionMatrix (hud.stage.getCamera(). kombiniert); – Aryan
entfernt diese Zeile aber immer noch keine Änderungen – kingx26