Как использовать DirectX.DirectInput в XNA

джойстик.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, так что же означает эта ошибка?


person Okan Kocyigit    schedule 09.04.2011    source источник


Ответы (1)


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

Аналогичное сообщение о стеке: Ошибка отладки. Тип "xx" определен в сборке, на которую нет ссылок

person Marcin Deptuła    schedule 09.04.2011