2012-03-13 60 views
0

我有一個基本的等軸測圖,一些精靈在html畫布中加載到地圖上。畫布上圖像的像素準確命中檢測?

我想知道,是否有可能點擊畫布,像素準確的水平,並讓JS找出你在畫布上點擊了什麼?

如果有,還有一種方法可以在沒有圖書館的情況下完成嗎?

+0

Intereresting問題。然而,也許你應該把它公佈在gamedev.stackexchange.com上:) – Luc125 2012-03-13 12:39:34

+0

我幾乎從來沒有得到過迴應:P – Sir 2012-03-13 21:37:22

回答

3

Canvas API有isPointInPath(x, y)方法,它允許您確定點(x,y)是否在當前路徑(或其上)內。

現在,如果您的畫布上已經有很多形狀,並且想知道哪個被點擊過,並且不想使用庫,那麼您將不得不維護代表這些形狀的對象的列表或地圖,並且有一個onclick事件處理程序遍歷它並執行一些計算。

這樣一份名單,可能看起來像

var shapeList = [ 
    {shape: "rect", x0: 100, y0: 100, x1: 200, y1: 150}, 
    {shape: "circle", x0: 400, y0: 400, r: 50}, 
    ... 
]; 

幸運的是,有圖書館,有可以爲你做這項工作。您可以檢查例如crafty.jslime.js。這些是Canvas遊戲開發的有用庫。

對於爲例,使用狡猾的containsPoint(x, y)方法:

var circle = new Crafty.circle(0, 0, 10); 
console.log(circle.containsPoint(0, 0)); // true 
console.log(circle.containsPoint(50, 50)); // false 
+0

你能解釋一下你發佈的第二個代碼片段。 – Sir 2012-03-13 21:35:28

+0

如果我有20 +圖片檢查,我將不得不做一個檢查,他們都得到真或假:S? – Sir 2012-03-14 04:10:49

+0

@Dave第二個片段只是創建一箇中心位於(0,0)且半徑爲10px的圓。然後它檢查圓圈是否包含點(0,0)(它是真的)和點(50,50)(它是假的)。 – Luc125 2012-03-15 13:39:57