2017-08-06 97 views
0

我有一个Android游戏,画布缩小到看起来一样使用该代码的所有设备:Android:如何正确缩放鼠标/触摸输入?

canvas.scale((float)(getWidth()/(double)WIDTH), (float)(getHeight()/(double)HEIGHT)) 

其中WIDTHHEIGHT分别为1920和1080。我的问题是,我的所有接触碰撞(即用户触摸的形状)使用Path S和Region s的处理:

public static boolean collided(Path a, Path b) { 
    Region clip = new Region(0,0,3000, 3000); 
    Region rA = new Region(); 
    rA.setPath(a, clip); 
    Region rB = new Region(); 
    rB.setPath(b, clip); 
    return !rA.quickReject(rB) && rA.op(rB, Region.Op.INTERSECT); 
} 

现在我也有另一种标度法(勉强有从我可以任何影响告诉,但有时确实有一定影响力)规模坐标和维度:

public static double scale(double x) { 
    return dpToPx(x)/Resources.getSystem().getDisplayMetrics().density; 
} 

我的问题是,这一切的缩放我似乎无法让鼠标在正确的位置。下面是我用它来创建处理鼠标和其他形状之间的碰撞鼠标Path代码:

mouse.set(x, y); 
mousePath.reset(); 
mousePath.addRect(mouse.x - 10, mouse.y - 10, mouse.x + 10, mouse.y + 10, Path.Direction.CW); 

我画mousePath,看看那里的mousePath是,这是结果我得到(这是在框中绿色,在鼠标实际上是在蓝圈一般地区)

enter image description here

这是更严重的问题,因为它似乎越接近我得到(0,0)的接近mousePath变到达鼠标的实际位置。

那么如何让鼠标在正确的位置?

回答

0

更多搜索结果证明这个问题是重复的:https://stackoverflow.com/a/24895485/4188097

浏览器始终在未转换的坐标中返回鼠标位置。您的绘图已经在变换后的空间中完成。如果你想知道你的鼠标在转换后的空间,你可以转换未转换鼠标坐标转换后的坐标如下:

var mouseXTransformed = (mouseX-panX)/scaleFactor; 
var mouseYTransformed = (mouseY-panY)/scaleFactor; 
相关问题