2012-10-01 3 views
3

C# 및 XAML을 사용하여 Windows Store 용 게임을 만들고 있습니다. 내 모든 게임 객체에는 캔버스가 있으며,이 캔버스는 자신의 시각을 묘사합니다. 이러한 캔버스는 캔버스 (gameRoot)에 표시됩니다.Windows에서의 키보드 처리 8 XAML 기반 게임

내가 누른 키 (예 : W가 올라간 상태)를 기준으로 플레이어를 이동하고 싶습니다. 다음은 내 표시 페이지입니다.

<Page 
x:Class="Labyrinth_XAML.MainPage" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:local="using:Labyrinth_XAML" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
mc:Ignorable="d"> 

<Canvas x:Name="gameRoot" KeyDown="gameRoot_KeyDown_1"> 
    <Button>Vakanu</Button> 
</Canvas> 


</Page> 

내 이벤트 핸들러에 중단 점을 만들었으며 KeyDown 이벤트가 실행되지 않습니다. 일부 구글 후, 내 캔버스 이벤트에 버튼을 만들면 알아 냈어. 하지만 제거하면 이벤트가 시작되지 않습니다. 버튼 밖으로 아무 곳이나 클릭하면 이벤트가 다시 실행되지 않습니다.

내 질문은 : 포커스가있는 요소에 의존하지 않고 페이지 내의 키를 누를 때마다 발생하는 키보드 이벤트 처리기를 어떻게 만들 수 있습니까?

답변

4

Window.Current.CoreWindow.KeyDown/Up 이벤트에 가입 할 수 있습니다.

+1

+1. 예. 특정 컨트롤에 바인딩되지 않고 전체적으로 주요 이벤트를 포착하는 것이 게임에 더 적합합니다. 그러나 WPF 및 WinForms의 이벤트 처리 기능을 사용하면 한 번에 하나의 키 또는 마우스 이벤트 만 포착 할 수 있습니다. Direct X와 같은 게임 인터페이스를 사용하면 여러 개의 키보드 및 마우스 키를 동시에 누를 수 있습니다. –

0

조금 전에 비슷한 문제로 싸웠습니다. 캔버스의 "Focusable"속성을 true로 설정해야합니다. 캔버스에 초점을 두려면 Canvas의 Focus() 함수를 호출해야합니다.

MSDN Focus Overview을 참조하면 내 머리를 맡길 수있었습니다.

1

포커스에 관계없이 전체 프레스 이벤트를 처리하려는 경우. 이 C# 코드를 생성자에 추가하십시오.

Window.Current.CoreWindow.KeyDown += CoreWindow_KeyDown; 

페이지에서 발생하는 모든 keyDown 이벤트에 가입합니다. 물론 핸들러를 추가하십시오 :

void CoreWindow_KeyDown(Windows.UI.Core.CoreWindow sender,  Windows.UI.Core.KeyEventArgs args) 
    { 
     //Do Something Here. 

    } 

KeyUp 이벤트에 대해서도 동일한 작업을 수행 할 수 있습니다.