У меня возникла проблема рисовать панель здоровья для текстур врага в правильном положении, когда игра начинается, а камера не перемещается, а экран порт:Текстуры бара здоровья движутся быстрее, чем игрок, когда камера начинает двигаться с начальной точки зрения.
FitViewport (GameConfig.WIDTH/GameConfig.PPM, GameConfig.HEIGHT/ GameConfig.PPM, GameCam);
не изменился, бары остаются на врагах правильно, но когда игрок проходит половину экрана и камера начинает следовать за ним, бары начинают двигаться, даже если враги не двигаются.
И когда игрок получает определенное расстояние от врагов, их поведение установлено прибытию и они выследить игрок также вызывают бары здоровья двигаться дальше от экрана: 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
и gHB
- это области текстуры здоровья, Кто-нибудь может понять, почему это происходит?
Вот функция визуализации в моем классе Play Screen, где бар здоровья каждого wolfbeast врага втягивается:
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();
}
}
Позвольте мне знать, если вам нужно больше информации и я обеспечу. Я думаю, что проблема в том, как я масштабирую свой мир с помощью PPM, может кто-нибудь, пожалуйста, скажите мне, что происходит, и как я могу это исправить?
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);
}
Кроме того, когда я закомментируйте строку, которая позволяет камере следовать плеер и камера не двигается, бары здоровья правильно остаться на врагов. Это не имеет никакого смысла, не должны ли бары двигаться только тогда, когда враги движутся when camera movement is off?
Используйте StretchViewport, если ваша игра имеет box2D – Aryan
Почему эта линия game.getBatch(). setProjectionMatrix (hud.stage.getCamera() вместе); – Aryan
удалил эту строку, но все равно никаких изменений – kingx26