小编Gib*_*bbo的帖子

像素逢低,桌面和Android

我正在使用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 android pixel density-independent-pixel libgdx

5
推荐指数
1
解决办法
1571
查看次数

字段在方法内不起作用

我有这个问题,更多的是一个查询,因为我实际上让它工作,但我不明白为什么,我目前正在学习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)

它工作正常,这是为什么?在方法中使用它似乎更聪明,因为没有其他方法需要使用它.

java

2
推荐指数
1
解决办法
72
查看次数

参数'angle'隐藏字段'float Utils.Transform.float'

我是一个相对较新的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)

我很困惑,方法中的参数如何隐藏字段变量?...

c#

1
推荐指数
1
解决办法
2069
查看次数

标签 统计

java ×2

android ×1

c# ×1

density-independent-pixel ×1

libgdx ×1

pixel ×1