2013-01-07 49 views
2

我遇到觸摸/多點觸控輸入問題。XNA for WP7和多點觸控更新每一幀

我想畫一個小矩形,100×100的尺寸,只要用戶按下(任務完成),但我也希望他們能夠爲移動用戶移動他的手指(即沒有發生ATM)。

除了不可移動的部分,我還會感到奇怪的行爲,比方說,我先用拇指觸摸,然後用中指觸摸。兩個立方體出現在每個手指的下方,但是如果我先取下手指(在這種情況下是拇指),放在第二個手指(中指)下方的立方體將會消失,而我的拇指所在的那個立方體仍然會在那裏。我想這個問題會解決,一旦我得到這個更新正確的時候有移動。

這是繪製和更新片段。任何幫助讚賞:

protected override void Update(GameTime gameTime) 
    { 
    if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) 
     this.Exit(); 

    TouchCollection touchLocations = TouchPanel.GetState(); 
    i = 0; 

    foreach (TouchLocation touchLocation in touchLocations) 
    { 
     if (touchLocation.State == TouchLocationState.Pressed) 
     { 
      pos[i] = touchLocation.Position; 
     } 
     i++; 
    } 
    base.Update(gameTime); 
} 

protected override void Draw(GameTime gameTime) 
{ 
    GraphicsDevice.Clear(Color.CornflowerBlue); 

    spriteBatch.Begin(); 
    for (j = 0; j < i; j++) 
    { 
     spriteBatch.Draw(whiteRectangle, new Rectangle(((int)pos[j].X - 50), ((int)pos[j].Y - 50), 100, 100), Color.Chocolate); 
    } 
    spriteBatch.End(); 
    base.Draw(gameTime); 
} 

回答

0

我會推薦使用字典,假設你想聯繫觸摸位置到他們的位置。關鍵應該是TouchLocation.Id

對於給定的交互,TouchLocation.Id將保持不變。無法保證TouchLocations的順序將從一幀到另一幀相同,因此您必須使用自己的ID而不是它們在集合中出現的順序。

0

我有點晚了這一點,但非常這裏什麼是錯的,我該怎麼解決呢?

foreach (TouchLocation touchLocation in touchLocations) 
{ 
    if (touchLocation.State == TouchLocationState.Pressed) 
    { 
     pos[i] = touchLocation.Position; 
    } 
    i++; 
} 

我想我是困了,當我寫了這部分代碼(什麼好的發生在凌晨2點之後......甚至沒有好的代碼)我不知道爲什麼我要檢查位置狀態是否被按下......這就是爲什麼當我移動時它沒有移動......第一幀確實被按下但一旦你開始移動它是。移動...總而言之,刪除,如果它像一個魅力工作...

foreach (TouchLocation touchLocation in touchLocations) 
{ 
    pos[i] = touchLocation.Position; 
    i++; 
} 

總而言之現在它表現如預期。

乾杯!