2017-08-06 65 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;