2012-02-10 39 views
1

我想檢查用戶點擊是否在我定義的一組retangles中,但是我應該使用另一種方法來執行此檢查嗎?如何檢查wp7 XNA觸摸事件是否在定義的矩形內

這是我現在有,但我不確定如何比較矩形對象與觸摸對象

private bool CheckEnemyClicked(Vector2 vector2, out Enemy enemyOut) 
{ 
    TouchCollection touches = TouchPanel.GetState(); 

    foreach (Enemy enemy in enemies) 
    { 
     //Find the rectangle of the sprite 
     Rectangle rectangle = new Rectangle(
            (int)enemy.Position.X, 
            (int)enemy.Position.Y, 
            enemy.Width, 
            enemy.Height); 

     //Check if click is hitting enemy 
     if(touchinput is within rectangle) 
     { 
      enemyOut = enemy; 
      return true; 
     } 
    } 
    enemyOut = null; 
    return false; 
} 

回答

4

TouchCollection返回具有「位置」成員的TouchLocation對象的集合。 Rectangle有一個Contains方法,它有一個可以檢查某個特定點是否包含在其中的重載。所以XNA框架爲你做了所有的辛苦工作。

您的代碼對於Touch的碰撞檢查部分看起來是這樣的。

//Check if click is hitting enemy 
foreach (TouchLocation location in collection) 
{ 
    if (rectangle.Contains((int)location.Position.X, (int)location.Position.Y)) 
    { 
      enemyOut = enemy; 
      return true; 
    } 
} 
2

TouchCollection是觸摸點的集合(如用戶可以在幾個可觸摸屏幕地方)。您應該檢查TouchCollection中的各個接觸點並找出相對於您的敵方矩形的位置。

+0

那麼做一個for循環並檢查所有點?這將是我檢查每個精靈10000(100x100像素)的操作,這不是一個問題,如果我有10-20個精靈在屏幕上,並做到每秒30次? – Mech0z 2012-02-10 12:54:26

+0

您需要某種場景管理。 Quadtree出現在我的腦海中,對於動畫對象來說這很困難。但是你也只需要檢查所有可見的物體,屏幕上沒有的東西不能被觸摸。現在,您只需遍歷所有用戶觸摸,對Quadtree單元格中的可見對象進行測試,並將測試降至最低。當然,如果你確定這個特定的觸摸是在精靈矩形內,你只測試每個像素。 – dowhilefor 2012-02-10 13:06:32

相關問題