我现在正在为WP10开发图形应用程序。我需要使用GestureRecognizer移动并调整屏幕上对象的大小。看起来有点酷,但是在某些情况下,用两个手指手势,GestureRecognizer会引发此错误。

WinRT信息:帧中的数据包不一致。指针ID不是唯一的,或者时间戳,帧ID,指针类型或源设备之间存在差异。

用一根手指的手势就可以了。奇怪的是,此逻辑在WP8.1上工作正常。

这是我的RecognizerHelper的源代码:

GestureHelper::GestureHelper(){
    this->recognizer = ref new GestureRecognizer();

    this->recognizer->GestureSettings = GestureSettings::ManipulationScale | GestureSettings::ManipulationTranslateX |
    GestureSettings::ManipulationTranslateY | GestureSettings::Tap | GestureSettings::ManipulationRotate | GestureSettings::DoubleTap;

    this->recognizer->Tapped += ref new TypedEventHandler<GestureRecognizer ^, TappedEventArgs ^>(this, &GestureHelper::OnTapped);
    this->recognizer->ManipulationStarted += ref new TypedEventHandler<GestureRecognizer ^, ManipulationStartedEventArgs ^>(this, &GestureHelper::OnManipulationStarted);
    this->recognizer->ManipulationCompleted += ref new TypedEventHandler<GestureRecognizer ^, ManipulationCompletedEventArgs ^>(this, &GestureHelper::OnManipulationCompleted);
    this->recognizer->ManipulationUpdated += ref new TypedEventHandler<GestureRecognizer ^, ManipulationUpdatedEventArgs ^>(this, &GestureHelper::OnManipulationUpdated);
}

void GestureHelper::ProcessPress(PointerPoint ^ppt){
    this->recognizer->ProcessDownEvent(ppt);
    if (this->Clicked) {
        this->Clicked(ppt->Position.X, ppt->Position.Y);
    }
}

void GestureHelper::ProcessMove(PointerPoint ^ppt){
    this->recognizer->ProcessMoveEvents(ppt->GetIntermediatePoints(ppt->PointerId));
}

void GestureHelper::ProcessRelease(PointerPoint ^ppt){
    this->recognizer->ProcessUpEvent(ppt);
}



void GestureHelper::OnManipulationStarted(GestureRecognizer^ sender, ManipulationStartedEventArgs^ e){
    if (this->Pressed){
        this->Pressed(e->Position.X, e->Position.Y);
    }
}

void GestureHelper::OnManipulationCompleted(GestureRecognizer ^sender, ManipulationCompletedEventArgs ^e) {
    if (this->Released) {
        this->Released(e->Position.X, e->Position.Y);
    }
}

void GestureHelper::OnManipulationUpdated(GestureRecognizer ^sender, ManipulationUpdatedEventArgs ^e){
    if (this->MoveUpdated){
        this->MoveUpdated(e->Position.X, e->Position.Y);
    }
    if (this->ZoomUpdated){
        this->ZoomUpdated(e->Delta.Scale);
    }
    if (this->RotateUpdated) {
        this->RotateUpdated(-e->Delta.Rotation);
    }
}

void GestureHelper::OnTapped(GestureRecognizer ^sender, TappedEventArgs ^e){
    if (this->Pressed) {
        this->Pressed(e->Position.X, e->Position.Y);
    }
    if (this->Released){
        this->Released(e->Position.X, e->Position.Y);
    }
}

谢谢你的帮助!

UPD:
try-catch得到了帮助,但仍然想了解为什么抛出此异常

最佳答案

好的,我在Microsoft论坛上得到了答案。这是Microsoft错误,将在下次更新中修复。因此,现在我使用try catch解决此问题。

在那里回答:
https://social.msdn.microsoft.com/Forums/ru-RU/2353edb7-8c1c-4a8d-9e57-ece72f863616/uwpgesturerecognizer-throws-exception-in-wp-direct3d-app?forum=wpdevelop

关于c++ - GestureRecognizer在WP Direct3D App中引发异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32380553/

10-13 03:09