Question

J'écris récemment un programme Wiimote:

    using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using WiimoteLib;

namespace WiiTester
{
    public partial class Form1 : Form
    {
        Wiimote wm = new Wiimote();
        public Form1()
        {
            InitializeComponent();


            wm.WiimoteChanged += wm_WiimoteChanged;
            wm.WiimoteExtensionChanged += wm_WiimoteExtensionChanged;

            wm.Connect();
            wm.SetReportType(InputReport.IRAccel, true);
        }

        void wm_WiimoteChanged(object sender, WiimoteChangedEventArgs args)
        {
            WiimoteState ws = args.WiimoteState;

            if (ws.ButtonState.A == true)
            {
                wm.SetRumble(true);
            }
            else
            {
                wm.SetRumble(false);
            }
        }

        void wm_WiimoteExtensionChanged(object sender, WiimoteExtensionChangedEventArgs args)
        {
            if (args.Inserted)
            {
                wm.SetReportType(InputReport.IRExtensionAccel, true);
            }
            else
            {
                wm.SetReportType(InputReport.IRAccel, true);
            }
        }
    }
}

Mon Wiimote continue de se déconnecter et cette erreur continue de fonctionner sur wm.Connect (); Tourné en attente de rapport de situation

Y a-t-il une solution?

Était-ce utile?

La solution

J'ai beaucoup d'expérience avec cette bibliothèque, et votre problème est probablement causé parce que vous appelez SetRumble si souvent, ce code:

    void wm_WiimoteChanged(object sender, WiimoteChangedEventArgs args)
    {
        WiimoteState ws = args.WiimoteState;

        if (ws.ButtonState.A == true)
        {
            wm.SetRumble(true);
        }
        else
        {
            wm.SetRumble(false);
        }
    }

Appellera SetRumble constamment si un est en panne ou non, envisagez d'utiliser ce code à la place:

    bool rumbleOn = false;

   void wm_WiimoteChanged(object sender, WiimoteChangedEventArgs args)
    {
      WiimoteState ws = args.WiimoteState;

      bool newRumble = (ws.ButtonState.A == true);

          if (rumbleOn != newRumble) 
      {
            rumbleOn = newRumble;
            wm.SetRumble(rumbleOn);
      }
    }

De cette façon, la méthode Set Rumble n'est appelée que lorsque cela est nécessaire et n'envoyant pas constamment des rapports de sortie au Wiimote qui provoque la surcharge du bus Bluetooth.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top