gpt4 book ai didi

java - Android 与像素的关系。我的 2D 瓷砖 map 遇到了严重的问题?

转载 作者:行者123 更新时间:2023-12-01 15:40:30 25 4
gpt4 key购买 nike

我已经搜索/阅读了所有从倾斜到像素的翻译,但我感觉有点不知所措,我确信它非常容易掌握,但我很老派:(所以我如果有人有时间的话,我恳求就此事提供一些帮助。

我有一个使用 SurfaceView 的 Android 游戏,它可以在屏幕上绘制 2d 图 block map 以进行益智游戏。我愚蠢地对我的设备的所有值进行了硬编码,只是为了让它启动并运行。现在它几乎 100% 完成了,我出去买了一个三星 Galaxy 平板电脑,它看起来像便便!任何人都可以阐明如何让以下代码在dip/dp(而不是像素)中工作吗?

TIA!

    public static int MAX_WIDTH                 = 320; // width of map area
public static int MAX_HEIGHT = 480; // height of map area
public static final int TILE_SIZE_2 = 32; // tile size dimensions

然后我将 map 区域设置为预定义区域

    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();
}
}

因此,它在我的设备上运行得非常好,但显然,我正在尝试覆盖尽可能多的手机。 map 的绘制与上面几乎相同,整个网格值 x/y * TILE_SIZE 等。

我确信我会踢自己,但我就是无法专心阅读我读过的任何内容。

干杯。

最佳答案

px = 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值,因此根据它们,您可以将像素硬编码值重新定义为dip值(水平轴和垂直轴的值不同)

关于java - Android 与像素的关系。我的 2D 瓷砖 map 遇到了严重的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8121814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com