0

Windows 10のユニバーサルアプリでsharpdx takeitを試していますが、入力が機能しません。デバイスごとに異なる入力を作成する必要があることはわかっていますが、今のところ、キーボードを試してみたいだけです。

そこで、最初にこのリンクに従ってプロジェクトをセットアップします。 Windows ユニバーサル アプリ用の SharpDx テンプレートはありますか?

そして今、私はいつものように入力を試みています:

コンストラクターで:

_keyboardManager = new KeyboardManager(this);

更新メソッドでは:

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

しかし、彼はキー B (または私が試した他のキー) が押されたことを決して記録しません。GetDownKeys() も試しましたが、リストは常に空です。

では、ここで何をすべきか考えている人はいますか?

4

2 に答える 2

0

ヘウレカ!

私は同じ問題を抱えていましたが、Windows 8.1. 解決策を見つけるのに2日かかりました。これは愚かな SwapChainPanel であり、このクラスは Control クラスから継承されないため、フォーカスを合わせることができず、キーボード イベントを処理しません。

解決策はHEREです。つまり、イベントを処理する Button のように、Control クラスから継承された XAML 要素を配置する必要があります。私の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() メソッドに if を入れました... コードを使用して、ボタンを手動でフォーカスする必要があります。"_swapChainButton.Focus(FocusState.Programmatic);"

しかし最後に、それは私にはあまり良くありません。とても遅いです。遅延があります。:/

于 2015-04-19T23:02:21.937 に答える