Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android dip vis像素。我的2d tilemap有严重问题吗?_Java_Android_2d_Tiles - Fatal编程技术网

Java Android dip vis像素。我的2d tilemap有严重问题吗?

Java Android dip vis像素。我的2d tilemap有严重问题吗?,java,android,2d,tiles,Java,Android,2d,Tiles,我已经搜索/阅读了所有的dip-to-pixel翻译,但我觉得有点不知所措,我相信这很容易理解,但我已经很老练了:(所以如果有人有时间的话,我请求在这件事上给予一些帮助 我有一款使用SurfaceView的android游戏,它在屏幕上绘制了一个二维拼图来进行益智游戏。我愚蠢地硬编码了我的设备的所有值,只是为了让它启动和运行。现在它几乎100%完成了,我出去买了一个三星Galaxy标签,它看起来像poop!有人能解释一下如何获得下面的code在dip/dp模式下工作,而不是像素模式 蒂亚 然后,

我已经搜索/阅读了所有的dip-to-pixel翻译,但我觉得有点不知所措,我相信这很容易理解,但我已经很老练了:(所以如果有人有时间的话,我请求在这件事上给予一些帮助

我有一款使用SurfaceView的android游戏,它在屏幕上绘制了一个二维拼图来进行益智游戏。我愚蠢地硬编码了我的设备的所有值,只是为了让它启动和运行。现在它几乎100%完成了,我出去买了一个三星Galaxy标签,它看起来像poop!有人能解释一下如何获得下面的code在dip/dp模式下工作,而不是像素模式

蒂亚

然后,我将地图区域设置为预定义区域

    map_area = new int[MAX_WIDTH/TILE_SIZE][MAX_HEIGHT/TILE_SIZE];
下面是我自己设置关卡的方式(当我还是老同学的时候,你会明白我的意思)-这是一个混乱,我知道!不过我确实有时间浪费

        public void mapStringToMap(String mapString){
    // clear the map first
    int i= 0;
    rocks = new CTile[mapString.length()];

    try
    {
    // now add the rock types to the map array
    for(int x = 0; x<MAX_WIDTH/TILE_SIZE; x++){
        for(int y =0; y<MAX_HEIGHT/TILE_SIZE; y++){
            rocks[i] = new CTile();
            setMapData(x, y, Integer.parseInt(String.valueOf(mapString.charAt(i))));
            rocks[i].setRockType(Integer.parseInt(String.valueOf(mapString.charAt(i))));
            rocks[i].setX(x*TILE_SIZE);
            rocks[i].setY(y*TILE_SIZE);
            rocks[i].setRockId(i);

            if(Integer.parseInt(String.valueOf(mapString.charAt(i))) == GOLD_TILE){
                rocks[i].setRockBitmap(goldTile);
                // increase the number of rocks for this level
                level_rock_count+=3;
            }else if(Integer.parseInt(String.valueOf(mapString.charAt(i))) == SILVER_TILE){
                rocks[i].setRockBitmap(silverTile);
                // increase the number of rocks for this level
                level_rock_count+=2;
            }else if(Integer.parseInt(String.valueOf(mapString.charAt(i))) == COPPER_TILE){
                rocks[i].setRockBitmap(copperTile);
                // increase the number of rocks for this level
                level_rock_count++;
            }else if(Integer.parseInt(String.valueOf(mapString.charAt(i))) == START_TILE){
                dave.setX(x*TILE_SIZE);
                dave.setY(y*TILE_SIZE);
            }else if(Integer.parseInt(String.valueOf(mapString.charAt(i))) == DIAMOND_TILE_1){
                rocks[i].setRockBitmap(diamondTile1);
                // increase the number of rocks for this level by 4!
                level_rock_count += 4;
            }

            // move on 
            i++;
        }
    }
    }
    catch(ArrayIndexOutOfBoundsException e)
    {
        e.printStackTrace();
    }
}
公共void映射字符串映射(字符串映射字符串){
//先清除地图
int i=0;
rocks=新的CTile[mapString.length()];
尝试
{
//现在将岩石类型添加到地图阵列中
对于(intx=0;xpx=dp*(dpi/160)
px=像素值,dp=显示独立像素,dpi=每英寸点数(设备分辨率)

这是一个简单的转换公式

DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
float xDpi = dm.xdpi;
float yDpi = dm.ydpi;

这些是x和y dpi值,因此根据它们,您可以将像素硬编码值重新定义为倾斜值(水平轴和垂直轴的倾斜值不同)

这会覆盖我地图区域的默认大小吗?因为这必须保持不变。我猜我可以使用相反的公式正确显示我的320x480地图,但要在更大的屏幕上正确绘制特定的dp。我尝试了“setFixedSize”在SurfaceHolder级别,但我不想使用它。这帮了大忙,非常感谢!它会相应地缩放地图,如果您希望它保持不变,可以让它以像素为单位定义。很高兴提供帮助:)情况就是这样,但是我还有更多的问题,因为我使用了一个固定的字符串作为我的级别数据,它需要320x480/32个平铺,所以我们需要10个单元格,15个单元格。0000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000从外部文件加载的地图数据。每个值表示要显示的不同分幅,以x*32 y*32等绘制。在更大的屏幕上,无论img大小如何(我已经放大了一些hdpi),地图内容都是关闭的。我正在反向操作。
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
float xDpi = dm.xdpi;
float yDpi = dm.ydpi;