SlateApplication中的事件处理一
2018-05-06 本文已影响0人
handBag
1 FSlateApplication是继承自FGenericApplicationMessageHandler接口,添加事件处理的能的
今天第一节就写一下他是自己注入到系统里的.以android为例
输入的核心是在AndroidInputInterface文件 里
for(int i = 0; i < FAndroidInputInterface::TouchInputStack.Num(); ++i)
{
TouchInput Touch = FAndroidInputInterface::TouchInputStack[i];
int32 ControllerId = FindExistingDevice(Touch.DeviceId);
ControllerId = (ControllerId == -1) ? 0 : ControllerId;
// send input to handler
switch ( Touch.Type )
{
case TouchBegan:
MessageHandler->OnTouchStarted(nullptr, Touch.Position, Touch.Handle, ControllerId);
break;
case TouchEnded:
MessageHandler->OnTouchEnded(Touch.Position, Touch.Handle, ControllerId);
break;
case TouchMoved:
MessageHandler->OnTouchMoved(Touch.Position, Touch.Handle, ControllerId);
break;
}
}
当Android收到touch事件后,通过一系列操作,会转到到这处来执行.这个时候 ,MessageHandler已经实例化成FSlateApplication了
代码里MessageHandler的类型就是FGenericApplicationMessageHandler类型
而messageHandler是在下面的函数里
FAndroidInputInterface::SetMessageHandler
传入的.调用这个函数的时机又是在引擎初始化的时候