Bunun için Google'da arama yaptım, ancak geldiğim tek şey eskiydi ve çalışmadı.C# .NET ile bir joystick'ten giriş alma
C# .NET kullanarak joystick verilerinin nasıl edinileceği hakkında herhangi bir bilgisi var mı?
Bunun için Google'da arama yaptım, ancak geldiğim tek şey eskiydi ve çalışmadı.C# .NET ile bir joystick'ten giriş alma
C# .NET kullanarak joystick verilerinin nasıl edinileceği hakkında herhangi bir bilgisi var mı?
Bir: SlimDX kullanın.
İki: (GamepadDevice
kendi paketleyicimdir ve kod yalnızca ilgili bölümlere indirilmiştir) gibi bir şeye benziyor.
bul joystick/ped GUIDs:
private void acquire(System.Windows.Forms.Form parent)
{
DirectInput dinput = new DirectInput();
pad = new Joystick(dinput, this.Device.Guid);
foreach (DeviceObjectInstance doi in pad.GetObjects(ObjectDeviceType.Axis))
{
pad.GetObjectPropertiesById((int)doi.ObjectType).SetRange(-5000, 5000);
}
pad.Properties.AxisMode = DeviceAxisMode.Absolute;
pad.SetCooperativeLevel(parent, (CooperativeLevel.Nonexclusive | CooperativeLevel.Background));
pad.Acquire();
}
Yoklama ped şuna benzer::
JoystickState state = new JoystickState();
if (pad.Poll().IsFailure)
{
result.Disconnect = true;
return result;
}
if (pad.GetCurrentState(ref state).IsFailure)
{
result.Disconnect = true;
return result;
}
result.X = state.X/5000.0f;
result.Y = state.Y/5000.0f;
int ispressed = 0;
bool[] buttons = state.GetButtons();
public virtual IList<GamepadDevice> Available()
{
IList<GamepadDevice> result = new List<GamepadDevice>();
DirectInput dinput = new DirectInput();
foreach (DeviceInstance di in dinput.GetDevices(DeviceClass.GameController, DeviceEnumerationFlags.AttachedOnly))
{
GamepadDevice dev = new GamepadDevice();
dev.Guid = di.InstanceGuid;
dev.Name = di.InstanceName;
result.Add(dev);
}
return result;
}
kullanıcı gamepad kazanmak, listeden seçilen sonra
İnsanlar hala bu cevabı okuyorken, daha önce RawInput'a geçtiğimi not etmeliyim: http://stackoverflow.com/a/12988935/184998 –
Şimdiye kadarki işleri elde etmek için üst kısım, set kooperatifini atladım seviye çağrısı. Windows 7'de yaşıyorum. SO cevabı microsoft, DirectInput yerine RawInput kullanmanızı öneririm. – Maslow
Kötü haber, Microsoft'un NET kitaplıklarını DirectX için desteklemeyi bıraktığı ve bunun yerine XNA'ya odaklandığı görünüyor. Ben GameDev'de çalışmıyorum, bu yüzden XNA'yı kullanmam gerekmiyor, ancak bilgisayar oyunları geliştiriyorsanız bunu deneyebilirsiniz. İyi haber şu ki başka yaklaşımlar var. Biri, C# 'den DirectX ile uyandırmanıza yardımcı olacak yeni çerçeve SlimDX. Diğer yolu projenize doğrudan "Microsoft.DirectX.dll" ve "Microsoft.DirectX.DirectInput.dll" başvuruları eklemektir. bunları ".. \ Windows \ Microsoft.NET \ Yönetilen Kod için DirectX \" bulabilirsiniz. Son yaklaşımı burada kullanacaksanız, bir joystick ile nasıl çalışacağınızı okuyabileceğiniz bir bağlantı to codeproject.
DÜZENLEME: Uygulamanız NET sürümüne göre yeni ise o zaman 2.0 uygulama askıda kalabilir. Bu sorun değişikliği yapılandırma dosyası düzeltmek ve bu eklemek için:
<startup useLegacyV2RuntimeActivationPolicy="true">
C# 'daki oyun çubuğu/gamepad girdisini araştırırken google'a girdiğim en büyük hit buydu. Başkalarının görmesi için bir cevap vermeliyim.
Bulduğum en kolay yol SharpDX ve DirectInput kullanmaktı. Sen sadece bir kaç metod meselesi, Bundan sonra Nuget (SharpDX.DirectInput)
aracılığıyla yükleyebilirsiniz:
static void Main()
{
// Initialize DirectInput
var directInput = new DirectInput();
// Find a Joystick Guid
var joystickGuid = Guid.Empty;
foreach (var deviceInstance in directInput.GetDevices(DeviceType.Gamepad,
DeviceEnumerationFlags.AllDevices))
joystickGuid = deviceInstance.InstanceGuid;
// If Gamepad not found, look for a Joystick
if (joystickGuid == Guid.Empty)
foreach (var deviceInstance in directInput.GetDevices(DeviceType.Joystick,
DeviceEnumerationFlags.AllDevices))
joystickGuid = deviceInstance.InstanceGuid;
// If Joystick not found, throws an error
if (joystickGuid == Guid.Empty)
{
Console.WriteLine("No joystick/Gamepad found.");
Console.ReadKey();
Environment.Exit(1);
}
// Instantiate the joystick
var joystick = new Joystick(directInput, joystickGuid);
Console.WriteLine("Found Joystick/Gamepad with GUID: {0}", joystickGuid);
// Query all suported ForceFeedback effects
var allEffects = joystick.GetEffects();
foreach (var effectInfo in allEffects)
Console.WriteLine("Effect available {0}", effectInfo.Name);
// Set BufferSize in order to use buffered data.
joystick.Properties.BufferSize = 128;
// Acquire the joystick
joystick.Acquire();
// Poll events from joystick
while (true)
{
joystick.Poll();
var datas = joystick.GetBufferedData();
foreach (var state in datas)
Console.WriteLine(state);
}
}
umarım bu yardımcı olur.
Bunu bir DualShock3 ve MotioninJoy sürücüleri ile çalışmak için bile aldım.
Uygulaması en kolay olanıdır. Bunun için teşekkürler! –
Google, bu soruna bir gereksinim olmasa da, beni buraya gönderdi ve OpenTK, Windows ve Linux (mono altında) desteği için iyi bir seçenektir. OpenTK docs itibaren
, bu kod Ahududu Pi + Raspbian + Mono 3.12.0 çalışır:
for (int i = 0; i < 4; i++)
{
var state = Joystick.GetState(i);
if (state.IsConnected)
{
float x = state.GetAxis(JoystickAxis.Axis0);
float y = state.GetAxis(JoystickAxis.Axis1);
// Print the current state of the joystick
Console.WriteLine(state);
}
}
o benim bir arkadaşım yazan adam. Modern .NET ile çalışmayacağını söylüyor. Şu an onunla IM üzerinden konuşuyorum. – chris12892
Arabirim aygıtı olarak hiçbir zaman bir joystick programlamamıştım, ancak bir kullanıcı olarak benim anlayışım, joystick'in klavye ve fare denetimlerini eşlemesidir (yani: logitech USB PS2 stil denetleyicimi HL2 için yapılandırdığımda, her düğmeyi eşleştiriyorum Bir tuşa veya fare düğmesine denetleyici) –
Ironic, 5 yıl sonra, şimdi aynı soruyu google, ben güncel ve söz değil çalışan söz konusu bulmak: | – Spiked3