在画布中使用dp或px进行Android游戏编程?

在画布中使用dp或px进行Android游戏编程?,android,android-canvas,Android,Android Canvas,我的游戏有点问题。让我们假设有一个1024x800(像素)的游戏室,您可以滑动它来查看更多内容 当我放置两个对象(一个挨着另一个)时,基于原始尺寸,它在mdpi设备上看起来正常,但在hdpi(例如)中,它们“更近”(这一定是因为它们的位图更大,但“x”和“y”坐标相同) 下面是一个例子: 所以,我认为我必须用三个规则来扩大hdpi中的游戏空间。首先,我认为我可以在draw方法(Canvas.drawBitmap)中完成,但它影响了一些冲突(例如,触摸事件不匹配)。我不能在使用X&Y坐标的每一行

我的游戏有点问题。让我们假设有一个1024x800(像素)的游戏室,您可以滑动它来查看更多内容

当我放置两个对象(一个挨着另一个)时,基于原始尺寸,它在mdpi设备上看起来正常,但在hdpi(例如)中,它们“更近”(这一定是因为它们的位图更大,但“x”和“y”坐标相同)

下面是一个例子:

所以,我认为我必须用三个规则来扩大hdpi中的游戏空间。首先,我认为我可以在draw方法(
Canvas.drawBitmap
)中完成,但它影响了一些冲突(例如,触摸事件不匹配)。我不能在使用X&Y坐标的每一行中都制定规则,因为我做的所有关卡和游戏物理都考虑了原始单位(像素)

以下是我的画法:

protected void drawSprite(int x, int y, Canvas canvas){
    int xv = isHUD?0:lw.getXView();
    int yv = isHUD?0:lw.getYView();
    canvas.drawBitmap(sprite_index, x+xv, y+yv, paint);
}
getXView()
getYView()
返回视图实际幻灯片的坐标

这是我用来检查碰撞的方法:

public Rect getShape() { 
    int xv = isHUD?0:lw.getXView();
    int yv = isHUD?0:lw.getYView();
    return new Rect(x+xv,y+yv,x+width+xv,y+height+yv);
}
我该怎么办


考虑到我将放置一个“关卡编辑器”,玩家将在其中共享他们的创作,并将“id”和XY坐标存储在数据库中。

对不起。LW变量是SurfaceView的引用。由于您希望所有设备上的游戏区域都是相同的虚拟世界大小,因此您需要自己的游戏像素大小,然后进行映射。你不想看到你的角色,因为你不想让你的角色在Nexus7和Nexus4上有相同的物理尺寸。但是,您确实希望将dp用于触摸控制。我正在研究完全相同的问题,并将有兴趣看到进一步的意见和建议。