我目前正在小型平台游戏中工作,我的相机运动出现问题。首先,当我的角色y位置大于我的屏幕尺寸时,我的屏幕尺寸为900x400我想改变相机位置。这是我更新相机的方式
public void updateCamera(){
leftButton.x = player1.getHitBox().x - 380;
spriteLeftButton.setPosition(leftButton.x, 20);
rightButton.x = player1.getHitBox().x - 280;
spriteRightButton.setPosition(rightButton.x, 20);
jumpButton.x = player1.getHitBox().x + 312;
spriteJumpButton.setPosition(jumpButton.x, 20);
camera.position.x = player1.getHitBox().x;
if(player1.getHitBox().getY() > Gdx.graphics.getHeight()){ // update camera
updateCameraY = true;
}else{
updateCameraY = false;
}
if(updateCameraY){
camera.position.y = player1.getHitBox().y;
}else{
camera.position.y = 200;
}
camera.update();
}
我也有Android设备的控件,所以这里有一些来自我游戏的图片 所以当我的角色的位置更高时,我得到了一些奇怪的结果。我的对手消失了。
答案 0 :(得分:2)
用2个摄像头渲染你的游戏真好。
快速样本:
gameBatch.setProjectionMatrix(gameCamera.combined);
gameBatch.begin();
sprite.draw(gameBatch);
gameBatch.end();
guiBatch.setProjectionMatrix(controlsCamera.combined);
guiBatch.begin();
sprite.draw(guiBatch);
guiBatch.end();
答案 1 :(得分:1)
您的标题和按钮正在移动的事实是因为它们被设置为静态位置
解决此问题的一种快速方法是获取相机位置,然后根据相机位置放置图像和文字
实现这一目标的更好方法是使用按钮 首先声明皮肤 您需要了解如何创建.json文件和纹理Atlas here是一个很好的教程
我将为你的"死亡"标签
做一个例子
private Stage stage = new Stage();
private Skin skin = new Skin(Gdx.files.internal("UI/uiskins.json"),
new TextureAtlas(Gdx.files.internal("UI/uiskins.atlas")));
private Label label = new Label("Deaths", skin);
private Table table = new Table();
在show()部分 您需要了解表的工作方式Here
table.center().top();
table.add(label).row();
table.setFillParent(true);
stage.addActor(table);
Gdx.input.setInputProcessor(stage);`
//And finally add this to where you want to update the death score
label.setText("Deaths: " + String.valueOf(yourDeathVariable));
希望你喜欢:)
答案 2 :(得分:1)
有两种方法可以实现这一目标。更简单的方法是在相机类中使用project()方法,它将您的世界/相机坐标转换为屏幕坐标。但是此方法将Vector3作为参数,因此您必须将UI坐标放入Vector3对象,然后将其传递给project()。下面是一个例子:
Vector3 camCoords = new Vector3(posX, posY, 0);
posX和posY是button / gui元素的x和y坐标。因为我们只处理2d,所以最后的参数-z必须为零。现在我们可以得到 屏幕坐标:
Vector3 screenCoords = camera.project(camCoords);
buttonX = screenCoords.x;
buttonY = screenCoords.y;
现在,如果您将在“buttonX”和“buttonY”处绘制元素,则元素将始终显示在屏幕上。
如果您不想使用上述方法:
您可以在不使用上述方法的情况下计算元素相对于相机位置的位置。您所要做的就是必须相对于相机而不是标准坐标来定位元素。下面是一些简单的数学运算,可以将标准坐标转换为摄像机坐标。
假设posX和posY是gui元素的x和y坐标。现在你必须计算相机的确切位置:
float cameraX = camera.position.x;
float cameraY = camera.position.x - (camera.viewportHeight/2);
position是Camera类中的Vector3。 camera.y会在屏幕中间返回一个值但是我们必须得到相机的底部,所以我们将减去视口的一半来做到这一点。现在,您所要做的就是将这些值添加到元素坐标中:
float newPosX = posX + cameraX;
float newPosY = posY + cameraY;
现在在这个newPosX和newPosY上绘制你的元素,它将始终坚持它的位置。