обнаружение события крана в приложении 2D UWP для Гололенса 1 - PullRequest
0 голосов
/ 12 января 2020

Я пытаюсь обнаружить событие касания воздуха в моем приложении 2D UWP для Hololens 1. Я использую VS 2019 для своей разработки. Я следовал некоторому примеру кода из BasicHologram и Руки и контроллеры движения в DirectX . Вот мой пример кода, который я написал:

SpatialInputHandler.cs

public class SpatialInputHandler
{
    private SpatialInteractionManager interactionManager;
    private SpatialInteractionSourceState sourceState;
    public SpatialInputHandler()
    {
        interactionManager = SpatialInteractionManager.GetForCurrentView();
        interactionManager.SourcePressed += this.OnSourcePressed;
    }
    public SpatialInteractionSourceState CheckForInput()
    {
        SpatialInteractionSourceState sourceState = this.sourceState;
        this.sourceState = null;
        return sourceState;
    }
    public void OnSourcePressed(SpatialInteractionManager sender, SpatialInteractionSourceEventArgs args)
    {
        sourceState = args.State;
    }
}

MainPage.cs

public sealed partial class MainPage : Page
{
    private SpatialInputHandler spatialInputHandler;
    DispatcherTimer dispatcherTimer;
    public MainPage()
    {
        this.InitializeComponent();
        spatialInputHandler = new SpatialInputHandler();
        dispatcherTimer = new DispatcherTimer();
        dispatcherTimer.Interval = TimeSpan.FromMilliseconds(60);
        dispatcherTimer.Tick += DispatcherTimer_Tick;
        dispatcherTimer.Start();
    }
    private void DispatcherTimer_Tick(object sender, object e)
    {
        SpatialInteractionSourceState pointerState = spatialInputHandler.CheckForInput();
        if (pointerState != null && pointerState.IsPressed)
        {
            textBlock2.Text = "airtap detected";
        }
        if(pointerState == null)
        {
            textBlock2.Text = "no airtap detected";
        }
    }
}

В моем коде я всегда получаю значение pointerState как ноль. Может кто-нибудь, пожалуйста, помогите мне, как понять это. Спасибо!

1 Ответ

0 голосов
/ 24 января 2020

Поскольку вы разрабатываете двумерное плоское приложение на HoloLens, класс SpatialInteractionManager не предназначен для такого сценария, он предназначен для голографических c приложений.

Для плоских приложений , он будет работать в оболочке, и поэтому нам потребуется обработать перенаправленные события, которые предназначены для сценария ввода и взаимодействия с пользователем ios (например, касание, мышь и т. д.). Например, ваш пользовательский интерфейс может иметь кнопку (Button, унаследованную от базового класса UIElement) и обрабатывать событие Click или Tap:

XAML:

<Grid>
        <Button Name="btnClick" Content="Click" Width="100" Height="50" Click="BtnClick_Click" Tapped="BtnClick_Tapped" />
    </Grid>

Backend:

private void BtnClick_Click(object sender, RoutedEventArgs e)
{
    Debug.WriteLine("Clicked");
}

private void BtnClick_Tapped(object sender, TappedRoutedEventArgs e)
{
    Debug.WriteLine("Tapped");
}

Эти события могут корректно реагировать на ваше взаимодействие с кранами HoloLens.

Для получения более подробной информации, ознакомьтесь с этой документацией: Обзор событий и перенаправленных событий

Если вы можете поделиться более подробной информацией о том, как вы хотите, чтобы воздушный кран взаимодействовал с вашим приложением, мы будем рады помочь вам двигаться вперед.

...