SharpDX DirectInput - niepoprawne działanie Myszy

0

Witam,zaczałem uczyć się biblioteki SharpDX i postanowiłem rozpocząć mały projekt w ramach nauki,niestety problem zaczął się przy dodawaniu funkcjonalności stanu hover,gdy mysz najedzie na teksturę o określonej skali i pozycji (klasa Rectangle),oto mój kod:

protected override void Update(GameTime gameTime)
        {
           
          //rect = new Rectangle(0,0,50);
    
            var di = new DirectInput();
            var mouse = new Mouse(di);
            mouse.Acquire();
            var mouseState = mouse.GetCurrentState();

if (rect.Intersects(new Rectangle(mouseState.X,mouseState.Y,10,10)))
            {
                Console.WriteLine(mousePosition.ToString());
            }
          
        }
 

Gdy uruchamiam grę to otrzymuję z konsoli cały czas wiadomość,że pozycja myszy wynosi 0,0 ,pomimo to że ciągle nią poruszam,a nawet na starcie jej pozycja była gdzie indziej.
Co robię źle i jak to mogę naprawić.Próbowałem też to zrobić bez użycia DirectInput a z użyciem klasy MouseManger,lecz efekt był ten sam,a więc coś robie źle.

0

Przetestowałem i problem polega na tym że za szybko żądasz wartości zaraz po żądaniu dostępu do urządzenia (myszy). A że za każdym razem tworzysz nowy obiekt Mouse i żądasz ponownie dostępu to cały czas dostajesz pozycję 0,0. Inaczej mówiąc to zrób raz:

 var di = new DirectInput();
var mouse = new Mouse(di);
mouse.Acquire();

Mój testowy kod:

#region

using System.Diagnostics;
using System.Windows.Forms;
using SharpDX.DirectInput;

#endregion

namespace WindowsFormsApplication1
{
   public partial class Form1 : Form
   {
      private readonly DirectInput di;
      private readonly Mouse mouse;

      public Form1()
      {
         InitializeComponent();
         di = new DirectInput();
         mouse = new Mouse(di);
         mouse.Acquire();
      }

      private void Form1_MouseClick(object sender, MouseEventArgs e)
      {
         var mouseState = mouse.GetCurrentState();
         var mousePosition = string.Format("X: {0} Y: {1} Z:{2}", mouseState.X, mouseState.Y, mouseState.Z);
         Debug.WriteLine(mousePosition);
      }
   }
}
0

@DibbyDum,zrobiłem tak:

 
public Editor()
        {
            _deviceManager = new GraphicsDeviceManager(this);
            _deviceManager.PreferredBackBufferWidth = Width;
            _deviceManager.PreferredBackBufferHeight = Height;
            
          
            
            _GridManager = new GridManager();

            _KeyboardManager = new KeyboardManager(this);
            
            Content.RootDirectory = @"\Content";

            di = new DirectInput();
            mouse = new Mouse(di);
            mouse.Acquire();
            this.IsMouseVisible = true;
        }
 protected override void Update(GameTime gameTime)
        {
            var Input = _KeyboardManager.GetState();
    
            _GridManager.Update(gameTime);
            layer.Update(_KeyboardManager);

            var mouseState = mouse.GetCurrentState();
            var mousePosition = new Point(mouseState.X,mouseState.Y);


            if (rect.Contains(mousePosition))
            {
                Console.WriteLine(mousePosition);
            }
            base.Update(gameTime);
        }

Efekt taki sam,tylko że wartości się zmieniają
Cały czas mam wpisy w konsoli że niby mysz nachodzi tam,mimo że nie nachodzi.

0

Nie wiem jakie dostajesz wartości ale warunek jaki jest sprawdzany jest następujący:

public bool Contains(int x, int y)
{
   if (this.X <= x && x < this.Right && this.Y <= y)
      return y < this.Bottom;
   return false;
}
/*
   Czyli dla "Rectangle rect = new Rectangle(0, 10, 50, 500);" to będzie:
   this.X = 0,
   this.Y = 10,
   this.Right = 50,
   this.Bottom = 500,
   x = pozycja myszy X,
   y = pozycja myszy Y,
*/

Więcej nie jestem Ci w stanie pomóc bo nie znam biblioteki SharpDX i mam raczej blade pojęcie o tym co chcesz zrobić. :P
EDIT: GetCurrentState(); Podaje o ile kursor został przesunięty względem poprzedniego pobrania współrzędnych.

1 użytkowników online, w tym zalogowanych: 0, gości: 1