tomasslavicek

TouchCollection a Mouse input MonoGame Win8

Nov 3rd, 2012
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.28 KB | None | 0 0
  1. TouchLocation? mousePressed = null; // Pro Win8 (pro ovládání myší... odlišení Pressed a Moved)
  2. Random rnd = new Random();
  3.  
  4. public void Update( ... )
  5. {
  6.     // Převedeme TouchCollection na List<TouchLocation> (aby tam šlo přidávat dotyky)
  7.     TouchCollection touchLocations = TouchPanel.GetState();
  8.     List<TouchLocation> allTouchLocations = new List<TouchLocation>();
  9.     foreach (TouchLocation tl in touchLocations)
  10.         allTouchLocations.Add(tl);            
  11.     LoadTouches(allTouchLocations);
  12.  
  13.     // Nyní zpracováváme dotyky v allTouchLocations...
  14.     foreach (TouchLocation tl in allTouchLocations)
  15.     {
  16.         //...
  17.     }
  18. }
  19.  
  20. /// <summary>
  21. /// Pokud je předané TouchCollection prázdné (nebyl načten dotyk prstu), zkusí načíst ještě vstup z myši
  22. /// - daný vstup přidá do předaného TouchCollection
  23. /// - pozn. problém MonoGame na Win8, pro čisté XNA např. na WP7 by se tato metoda volat neměla
  24. ///   (tj. např. ošetřit volání direktivou #if WIN8...)
  25. /// </summary>
  26. private void LoadTouches(List<TouchLocation> availableTLs)
  27. {
  28.     // Pro Win8 řešíme zvlášť jednodotykové ovládání (je načítáno z myši)
  29.     if (availableTLs.Count == 0)
  30.     {
  31.         MouseState ms = ScreenParams.UserInput.MouseStateValue;
  32.         if (ms.LeftButton == ButtonState.Pressed)
  33.         {
  34.             // Provedl myší MouseDown...
  35.             if (mousePressed == null)
  36.                 mousePressed = new TouchLocation(rnd.Next(Int32.MaxValue - 1), TouchLocationState.Pressed, new Vector2(ms.X, ms.Y));
  37.             else // Nebo MouseMove...
  38.                 mousePressed = new TouchLocation(mousePressed.Value.Id, TouchLocationState.Moved, new Vector2(ms.X, ms.Y));
  39.             availableTLs.Add(mousePressed.Value);
  40.         }
  41.         else if (ms.LeftButton == ButtonState.Released)
  42.         {
  43.             if (mousePressed != null)
  44.             {
  45.                 if (mousePressed.Value.State == TouchLocationState.Released)
  46.                     mousePressed = null;
  47.                 else
  48.                 {
  49.                     mousePressed = new TouchLocation(mousePressed.Value.Id, TouchLocationState.Released, new Vector2(ms.X, ms.Y));
  50.                     availableTLs.Add(mousePressed.Value);
  51.                 }
  52.             }
  53.         }
  54.     }
  55. }
Advertisement
Add Comment
Please, Sign In to add comment