Camera LibGDX移动摄像机
我目前在小型platformer游戏公司工作,我的相机移动有问题。首先,我的屏幕尺寸为900x400当我的角色y位置大于我的屏幕尺寸时,我想改变相机的位置。下面是我如何更新我的相机Camera LibGDX移动摄像机,camera,libgdx,Camera,Libgdx,我目前在小型platformer游戏公司工作,我的相机移动有问题。首先,我的屏幕尺寸为900x400当我的角色y位置大于我的屏幕尺寸时,我想改变相机的位置。下面是我如何更新我的相机 public void updateCamera(){ leftButton.x = player1.getHitBox().x - 380; spriteLeftButton.setPosition(leftButton.x, 20);
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();
}
我还有安卓设备的控制器,下面是我游戏中的一些图片
所以当我的角色的y位置较高时,我得到了一些奇怪的结果。我的控制失效。使用两个摄像头渲染游戏很好
gameBatch.setProjectionMatrix(gameCamera.combined);
gameBatch.begin();
sprite.draw(gameBatch);
gameBatch.end();
guiBatch.setProjectionMatrix(controlsCamera.combined);
guiBatch.begin();
sprite.draw(guiBatch);
guiBatch.end();
这是很好的渲染你的游戏与2个摄像头
gameBatch.setProjectionMatrix(gameCamera.combined);
gameBatch.begin();
sprite.draw(gameBatch);
gameBatch.end();
guiBatch.setProjectionMatrix(controlsCamera.combined);
guiBatch.begin();
sprite.draw(guiBatch);
guiBatch.end();
标题和按钮正在移开是因为它们被设置为静态位置 解决此问题的一种快速方法是获取相机位置,然后根据相机位置放置图像和文字 实现这一点的更好方法是使用按钮 先申报皮肤 您需要学习如何创建.json文件和纹理图集 这是一个很好的教程 我会为你的“死亡”标签做个例子
私有阶段=新阶段();
私有皮肤=新皮肤(Gdx.files.internal(“UI/uiskins.json”),
新的TextureAtlas(Gdx.files.internal(“UI/uiskins.atlas”);
私有标签=新标签(“死亡”,皮肤);
私有表=新表()代码>
在show()部分
你需要知道桌子是如何工作的
希望您喜欢:)您的标题和按钮正在移开是因为它们被设置为静态位置
解决此问题的一种快速方法是获取相机位置,然后根据相机位置放置图像和文字
实现这一点的更好方法是使用按钮
先申报皮肤
您需要学习如何创建.json文件和纹理图集
这是一个很好的教程
我会为你的“死亡”标签做个例子
私有阶段=新阶段();
私有皮肤=新皮肤(Gdx.files.internal(“UI/uiskins.json”),
新的TextureAtlas(Gdx.files.internal(“UI/uiskins.atlas”);
私有标签=新标签(“死亡”,皮肤);
私有表=新表()代码>
在show()部分
你需要知道桌子是如何工作的
希望你喜欢:)实现这一点有两种方法。更简单的方法是在camera类中使用project()方法,该方法将世界/相机坐标转换为屏幕坐标。但此方法将Vector3作为参数,因此必须将UI坐标放入Vector3对象,然后将其传递给project()。举个例子:
Vector3 camCoords = new Vector3(posX, posY, 0);
posX和posY是按钮/gui元素的x和y坐标。因为我们只处理2d,所以最后一个参数-z必须为零。现在我们可以
屏幕坐标:
Vector3 screenCoords = camera.project(camCoords);
buttonX = screenCoords.x;
buttonY = screenCoords.y;
float newPosX = posX + cameraX;
float newPosY = posY + cameraY;
现在,如果您将在“buttonX”和“buttonY”处绘制元素,元素将始终显示在屏幕上
如果您不想使用上述方法:
可以计算图元相对于摄影机位置的位置,而无需使用上述方法。你所要做的就是,你必须定位你的元素相对于相机,而不是你的标准坐标。下面是一些将标准坐标转换为相机坐标的简单数学
假设posX和posY是gui元素的x和y坐标。现在,您必须计算相机的准确位置:
float cameraX = camera.position.x;
float cameraY = camera.position.x - (camera.viewportHeight/2);
位置是摄影机类中的矢量3。camera.y将在屏幕中间返回一个值,但我们必须得到相机的底部,因此我们将减去视口的一半。现在,您只需将这些值添加到元素坐标:
Vector3 screenCoords = camera.project(camCoords);
buttonX = screenCoords.x;
buttonY = screenCoords.y;
float newPosX = posX + cameraX;
float newPosY = posY + cameraY;
现在在这个newPosX和newPosY处绘制元素,它将始终保持其位置。有两种方法可以实现这一点。更简单的方法是在camera类中使用project()方法,该方法将世界/相机坐标转换为屏幕坐标。但此方法将Vector3作为参数,因此必须将UI坐标放入Vector3对象,然后将其传递给project()。举个例子:
Vector3 camCoords = new Vector3(posX, posY, 0);
posX和posY是按钮/gui元素的x和y坐标。因为我们只处理2d,所以最后一个参数-z必须为零。现在我们可以
屏幕坐标:
Vector3 screenCoords = camera.project(camCoords);
buttonX = screenCoords.x;
buttonY = screenCoords.y;
float newPosX = posX + cameraX;
float newPosY = posY + cameraY;
现在,如果您将在“buttonX”和“buttonY”处绘制元素,元素将始终显示在屏幕上
如果您不想使用上述方法:
可以计算图元相对于摄影机位置的位置,而无需使用上述方法。你所要做的就是,你必须定位你的元素相对于相机,而不是你的标准坐标。下面是一些将标准坐标转换为相机坐标的简单数学
假设posX和posY是gui元素的x和y坐标。现在,您必须计算相机的准确位置:
float cameraX = camera.position.x;
float cameraY = camera.position.x - (camera.viewportHeight/2);
位置是摄影机类中的矢量3。camera.y将在屏幕中间返回一个值,但我们必须得到相机的底部,因此我们将减去视口的一半。现在,您只需将这些值添加到元素坐标:
Vector3 screenCoords = camera.project(camCoords);
buttonX = screenCoords.x;
buttonY = screenCoords.y;
float newPosX = posX + cameraX;
float newPosY = posY + cameraY;
现在,在这个newPosX和newPosY处绘制元素,它将始终保持其位置。在UI中使用第二个摄像头要简单得多。否则,您必须在摄影机移动时移动所有UI内容。一个专用的用户界面摄像头可以