当摄像机开始从起始视点移动时,健康条纹理的移动速度比玩家快



当游戏开始时,摄像机没有移动并且屏幕视图端口时,我在正确的位置为敌人纹理绘制生命条时遇到问题:

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

没有改变,条形正确停留在敌人身上,但是当玩家通过一半的屏幕并且摄像机开始跟随他时,即使敌人没有移动,条形也会开始移动。

当玩家与敌人保持一定距离时,他们的行为被设置为到达,他们追踪玩家也会导致生命条进一步远离屏幕:这是当摄像机和敌人开始移动时屏幕外的生命条。

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();
}

wHBgHB是生命条纹理区域, 有谁知道为什么会发生这种情况?

这是我的Play屏幕类中的渲染函数,其中绘制了每个狼兽敌人的生命条:

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);
}

此外,当我注释掉使摄像机能够跟随玩家并且摄像机不移动的线条时,生命条会正确停留在敌人身上。这没有任何意义,当摄像机移动关闭时,条形不应该只在敌人移动时移动吗?

问题是我的投影矩阵。我为精灵和身体使用了不同的投影,这就是为什么它们以不同的速度移动。这效果最好:

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

这对我有用:

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
);
}

根据资产大小和缩放比例调整值

最新更新