微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用教程使用 C# 和 DirectX 从操纵杆获取输入

如何解决使用教程使用 C# 和 DirectX 从操纵杆获取输入

我使用的是 Visual Studio 2019,我的问题与此 Tutorial 的使用密切相关。我已经完成了所有步骤,例如:

  1. 在 C# 中创建窗口窗体
  2. 添加现有文件 Joystick.cs
  3. 添加参考项
  4. 添加了应用程序配置文件并粘贴了提供的代码
  5. 将示例代码粘贴到 Form1.cs 中

我的问题:我错过了什么?我无法访问游戏杆库 Screenshot of Error

这里是完整的 Form1.cs 代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace RunJoyStickOnLocalMachine{

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender,EventArgs e)
    {

    }
    private void joystickTimer_Tick_1(object sender,EventArgs e)
    {
        try
        {
            joystick.UpdateStatus();
            joystickButtons = joystick.buttons;

            if (joystick.Xaxis == 0)
                output.Text += "Left\n";

            if (joystick.Xaxis == 65535)
                output.Text += "Right\n";

            if (joystick.Yaxis == 0)
                output.Text += "Up\n";

            if (joystick.Yaxis == 65535)
                output.Text += "Down\n";

            for (int i = 0; i < joystickButtons.Length; i++)
            {
                if (joystickButtons[i] == true)
                    output.Text += "Button " + i + " pressed\n";
            }
        }
        catch
        {
            joystickTimer.Enabled = false;
            connectToJoystick(joystick);
        }
    }
}
}

如果还有什么需要我提供的,请通知我。

谢谢!


编辑:我通过比较教程文件博客的分步教程文件解决了这个问题。

解决方法

您可以从您提到的文章中下载项目以检查代码。

根据我的测试,在项目中添加theJoystick.cs后,可以在form1.cs代码中使用如下代码。

public partial class Form1 : Form
    {

        private Joystick joystick;        // define the type Joystick
        private bool[] joystickButtons;  // here  define the bool array
        public Form1()
        {
            InitializeComponent();
            joystick = new Joystick(this.Handle);
            connectToJoystick(joystick);
        }

        private void joystickTimer_Tick(object sender,EventArgs e)
        {
            try
            {
                joystick.UpdateStatus();
                joystickButtons = joystick.buttons;

                if (joystick.Xaxis == 0)
                    output.Text += "Left\n";    // output is the name of richtextbox

                if (joystick.Xaxis == 65535)
                    output.Text += "Right\n";

                if (joystick.Yaxis == 0)
                    output.Text += "Up\n";

                if (joystick.Yaxis == 65535)
                    output.Text += "Down\n";

                for (int i = 0; i < joystickButtons.Length; i++)
                {
                    if (joystickButtons[i] == true)
                        output.Text += "Button " + i + " Pressed\n";
                }
            }
            catch
            {
                joystickTimer.Enabled = false;
                connectToJoystick(joystick);
            }
        }
        private void enableTimer()
        {
            if (this.InvokeRequired)
            {
                BeginInvoke(new ThreadStart(delegate ()
                {
                    joystickTimer.Enabled = true;
                }));
            }
            else
                joystickTimer.Enabled = true;
        }
        private void connectToJoystick(Joystick joystick)
        {
            while (true)
            {
                string sticks = joystick.FindJoysticks();
                if (sticks != null)
                {
                    if (joystick.AcquireJoystick(sticks))
                    {
                        enableTimer();
                        break;
                    }
                }
            }
        }
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。