当游戏开始并且相机没有移动并且屏幕视图端口时,我在正确位置为我的敌人纹理绘制健康栏时遇到问题:
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类中的渲染功能,其中每个狼人敌人的健康栏都被绘制出来:
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?
答案 0 :(得分:0)
问题是我的投影矩阵。我使用不同的投影用于精灵和不同的身体,这就是为什么他们以不同的速度移动。这效果最好:
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
);
}
根据资产规模和缩放比例调整值