我正在使用Libgdx编写一个Android游戏代码,你可能知道,如果做错了很多屏幕分辨率会导致一些问题.所以我试图使用这个DP单元而不是像素.
但是,我在这里有这个方法:
public static float pixelToDP(float dp){
return dp * Gdx.graphics.getDensity();
}
Run Code Online (Sandbox Code Playgroud)
该Gdx.graphics.getDensity()方法实际上获得了SCALE,所以它已经为我完成了.
现在问题是,libgdx是跨平台的,有利于测试.当我在我的S4上启动它时,它的分辨率为1920x1080,dpi高达480,与我的可怕和价格过高的笔记本电脑相比,它有1366x768 @ 92dpi,它正好放在我想要的地方.在桌面上它是关闭的,在X轴和Y轴上有几百个像素.
这是因为我的屏幕dpi是在@ 92dpi下测量的,分辨率要低得多,实际游戏在桌面上不是全屏?
以下是绘制对象的代码:
table.setPosition(MathHelper.pixelToDP(150), MathHelper.pixelToDP(200));
Run Code Online (Sandbox Code Playgroud)
为了在桌面上完美呈现,我必须做到:
table.setPosition(MathHelper.pixelToDP(480), MathHelper.pixelToDP(700));
Run Code Online (Sandbox Code Playgroud)
这在我的手机上甚至不可见,因为刻度实际上是3倍,这使得它在Y轴上离屏幕有200个像素.
有没有解决的办法?或者我基本上将不得不处理平台检查和不同的代码块?
可能的方法:
所以我改变了我的DP转换方法,如果我是做100*0.5它将返回的50新的价值,但在现实中我想要100 + 100*0.5的一部开拓创新的价值.
不确定这是否是一个正确的修复,但无论是在桌面上绘制在笔记本电脑和手机上的完全相同的位置:
public static float pixelToDP(float dp){
if(Gdx.graphics.getDensity() < 1)
return dp + dp * Gdx.graphics.getDensity();
return dp * Gdx.graphics.getDensity();
Run Code Online (Sandbox Code Playgroud)
这只是一个廉价的解决方案还是应该如何做到这一点?
我有这个问题,更多的是一个查询,因为我实际上让它工作,但我不明白为什么,我目前正在学习java和阅读cengage第7版,这是练习之一.
所以我有这个方法:
public static void calculatePrice(){
Scanner userInput = new Scanner(System.in);
int orderNumber;
double totalBill = 0;
orderNumber = userInput.nextInt();
switch(orderNumber){
case 1:
totalBill = totalBill + American;
displayMenu();
calculatePrice();
break;
case 2:
totalBill = totalBill + Espresso;
displayMenu();
calculatePrice();
break;
case 3:
totalBill = totalBill + Latte;
displayMenu();
calculatePrice();
break;
case 0:
System.out.println("Your total bill will be $"+ totalBill);
break;
}
}
Run Code Online (Sandbox Code Playgroud)
本章教我决定,我决定在这种情况下使用开关.我有另一种方法询问用户问题.
这个方法的问题是字段:
double totalBill = 0;
Run Code Online (Sandbox Code Playgroud)
这不起作用,我不知道为什么,程序编译但它始终返回设定价格0,无论我在案例场景中的逻辑.
但是,当我从方法中删除该字段并将其放在顶部时,使其成为类宽:
private static double totalBill = 0;
Run Code Online (Sandbox Code Playgroud)
它工作正常,这是为什么?在方法中使用它似乎更聪明,因为没有其他方法需要使用它.
我是一个相对较新的C#,在理解这条消息时遇到了一些麻烦,以及它是如何导致问题的.在安装resharper之前没有显示错误,所以我认为它只是糖语法错误?
public void SetTransform(float x, float y, float angle)
{
SetTransform(x, y);
this.angle = angle;
}
Run Code Online (Sandbox Code Playgroud)
这个领域本身:
float angle;
Run Code Online (Sandbox Code Playgroud)
我很困惑,方法中的参数如何隐藏字段变量?...