Как использовать DirectX.DirectInput в XNA - PullRequest
1 голос
/ 09 апреля 2011

joystick.cs

using System;
using Microsoft.DirectX.DirectInput;

namespace gameproject
{
    /// <summary>
    /// Description of device.
    /// </summary>
    class joysticks
    {

        public static Device joystick;
        public static JoystickState state;

        public static void InitDevices() //Function of initialize device
        {
            //create joystick device.
            foreach (DeviceInstance di in Manager.GetDevices(
                DeviceClass.GameControl,
                EnumDevicesFlags.AttachedOnly))
            {
                joystick = new Device(di.InstanceGuid);
                break;
            }

            if (joystick == null)
            {
                //Throw exception if joystick not found.
            }

            //Set joystick axis ranges.
            else {
                foreach (DeviceObjectInstance doi in joystick.Objects)
                {
                    if ((doi.ObjectId & (int)DeviceObjectTypeFlags.Axis) != 0)
                    {
                        joystick.Properties.SetRange(
                            ParameterHow.ById,
                            doi.ObjectId,
                            new InputRange(-5000, 5000));
                    }

                }

                joystick.Properties.AxisModeAbsolute = true;
                joystick.SetCooperativeLevel(null,CooperativeLevelFlags.NonExclusive | CooperativeLevelFlags.Background);

                //Acquire devices for capturing.
                joystick.Acquire();
                state = joystick.CurrentJoystickState;
            }
        }

        public static void UpdateJoystick()   // Capturing from device joystick
        {
            //Get Joystick State.
            if(joystick!=null)
                state = joystick.CurrentJoystickState;
        }

    }
}

В этой строке произошла ошибка,

    joystick.SetCooperativeLevel(null,CooperativeLevelFlags.NonExclusive 
| CooperativeLevelFlags.Background);

ошибка

Error 1 The type 'System.Windows.Forms.Control' is defined in an 
assembly that is not referenced.
     You must add a reference to assembly 'System.Windows.Forms...

Я работаю над XNA 3.0 и .NET 3.5, так что же означает эта ошибка?

1 Ответ

2 голосов
/ 09 апреля 2011

SetCooperativeLevel принимает System.Windows.Forms.Control объект в качестве первого параметра (где у вас есть ноль), поэтому вы все равно должны ссылаться на сборку, где этот класс определен в вашем приложении. Добавьте ссылку do System.Windows.Forms.dll из вашего приложения / игры и попробуйте затем. Если код, который вы используете, использует некоторые другие классы, на которые вы не ссылались, это нормально, но когда они общедоступны (например, они являются параметрами или возвращаются из методов, которые вы вызываете), вы должны ссылаться на сборки, в которых эти типы определены.

Похожий пост stackoverflow: Ошибка отладки "Тип 'xx' определен в сборке, на которую нет ссылок"

...