2015-04-06 108 views
0

我试着用通用应用程序在Windows 10 sharpdx takeit并无法获得输入工作。我知道我必须为不同的设备创建不同的输入,但现在我只想尝试键盘。Sharpdx grabit输入将无法与Windows 10通用应用程序

所以我请点击此链接率先成立项目:Is there a SharpDx Template, for a Windows Universal App?

而现在我想输入像我通常做的那样:

在constuctor:

_keyboardManager = new KeyboardManager(this); 

在更新方法:

var state = _keyboardManager.GetState(); 
if (state.IsKeyDown(Keys.B)) 
{ 
    //do stuff 
} 

但他从来没有注册的关键B (或者我尝试过的任何其他键)。我也尝试过GetDownKeys(),但列表总是空的。

那么,任何人都不知道该怎么办?

回答

0

而且还有一个又一个,更好,更方便的版本:

using Windows.UI.Core; 
using SharpDX.Toolkit; 
using Windows.System; 
namespace Example 
{ 
    class MyGame : Game 
    { 
     public MyGame() 
     { 
      CoreWindow.GetForCurrentThread().KeyDown += MyGame_KeyDown; 
     } 
     void MyGame_KeyDown(CoreWindow sender, KeyEventArgs args) 
     { 
      System.Diagnostics.Debug.WriteLine(args.VirtualKey); 
     } 
    } 
} 

你要订阅CoreWindow的事件,这是它:)

+1

对不起,我迟到发表评论,但这个工作完全正常。谢谢 :) – user1776562

0

HEUREKA!

我有同样的问题,但与Windows 8.1。我花了2天才找到解决方案。这是愚蠢的SwapChainPanel,因为该类不从Control类继承,所以它不能处理键盘事件,因此无法集中注意力。

解决方案是HERE也就是说,您必须放置一个继承自Control类的XAML元素,例如Button来处理事件。我的XAML文件是这样的:

<SwapChainPanel x:Name="_swapChainPanel" 
       Loaded="_swapChainPanel_Loaded" 
       KeyDown="_swapChainPanel_KeyDown"> 
    <Button x:Name="_swapChainButton" 
      Content="Button" 
      HorizontalAlignment="Left" 
      Height="0" 
      VerticalAlignment="Top" 
      Width="0" 
      KeyDown="_swapChainButton_KeyDown"> 
    </Button> 
</SwapChainPanel> 

在XAML.cs我处理的事件是这样的:

private void _swapChainButton_KeyDown(object sender, Windows.UI.Xaml.Input.KeyRoutedEventArgs e) 
    { 
     e.Handled = false; //This will pass the event to its parent, which is the _swapChainPanel 
    } 

private void _swapChainPanel_KeyDown(object sender, Windows.UI.Xaml.Input.KeyRoutedEventArgs e) 
    { 
     game.KeyboardEvent(); 
    } 

在的KeyboardEvent()方法,我把,如果事情......你有使用代码手动使按钮处于焦点状态。 “_swapChainButton.Focus(FocusState.Programmatic);”

但是最后,它对我来说并不好,它太慢了。它有延迟。 :/

相关问题