RawGameController.GetCurrentReading не обновляет массивы в UWP - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть членский поток для работающего объекта, который также содержит RawGameController.

Поток через некоторое время l oop и должен постоянно обновляться, проверять контроллер, но когда я проверяю значения, ничего не меняется , Я могу подтвердить, что контроллер есть в windows и кнопки работают. (это xbox 360 проводной, но он должен поддерживать множество различных контроллеров, поэтому я не могу использовать объект Gamepad.)

 public class myController
    {
    public RawGameController rgController;
    public Thread Poller;


public void ControllerPoller()
    {
        bool[] buttonArray = new bool[rgController.ButtonCount];
        GameControllerSwitchPosition[] switchArray = new GameControllerSwitchPosition[rgController.SwitchCount];
        double[] axisArray = new double[rgController.AxisCount];

        bool[] oldButtonArray = new bool[rgController.ButtonCount];
        GameControllerSwitchPosition[] oldSwitchArray = new GameControllerSwitchPosition[rgController.SwitchCount];
        double[] oldAxisArray = new double[rgController.AxisCount];

        while (true)
        {
            //roughly polling 60hz so...
            using (var waitHandle = new ManualResetEventSlim(initialState: false))
            {
                waitHandle.Wait(TimeSpan.FromMilliseconds(1000 / 60));
            }
            rgController.GetCurrentReading(buttonArray, switchArray, axisArray);
            if (buttonArray.Equals(oldButtonArray) && switchArray.Equals(oldSwitchArray) && axisArray.Equals(oldAxisArray))
            {
                continue;
            }

Затем я рассмотрю изменения ввода далее.

Любая помощь будет великолепна.

1 Ответ

0 голосов
/ 27 апреля 2020

Array.Equals - проверка личности (ссылаются ли они на один и тот же объект). Это всегда будет false для ваших массивов, поскольку они являются разными объектами:

using System;

namespace Test
{
  public class Program
  {
    public static void Main(string[] args)
    {
      var nums1 = new int[] { 1, 2, 3 };
      var nums2 = new int[] { 1, 2, 3 };
      var nums1ref = nums1;

      Console.WriteLine(nums1.Equals(nums2));    // False
      Console.WriteLine(nums1.Equals(nums1ref)); // True
    }
  }
}

Вы можете найти примеры того, как проверить равенство содержимого массива здесь .

Кроме того, если у вас есть правильный тест на равенство, вы, вероятно, не хотите использовать && (и), а вместо этого использовать || (или) в своих проверках - вам, скорее всего, все равно, если какой-либо содержимого массива изменилось, за исключением того, что все из них изменились сразу.

...