MT4j 体系结构

结构

这篇文章展示了MT4J框架设计方面的一些东西。旨在帮助用户和开发者更好的理解这个MT4J下的结构和概念。

 

 总览

MT4J的主题功能是通过分开为不同的层,各层通过各自的底层利用事件驱动来进行交互。这里着重的讲述了一个灵活的输入结构在输入层中的重要性。

硬件输入抽象层

通过使用硬件抽象层,MT4J在最低限度的修改条件下,支持多种硬件输入在抽象输入层。在这个抽象层中不同的硬件输入数据转换成了统一的输入事件。为了支持一个新类型的硬件输入,你只需要做一步就能够完成。继承一个抽象类,所有的输入源的抽象类(AbstractInputSource)并且添加一些特定功能的方法。MT4J带有一部分输入实现包括:鼠标、键盘、两点输入协议,也包括TUIO协议。所有的这些实现都能够同步的使用和排除一些不确定的行为所造成的危险。

 

输入处理层

在MT4j中,输入事件流中输入处理分为两个阶段。

第一个阶段是全局输入的处理阶段,凡是输入处理都先进行注册,然后监听各种输入源的输入。这一阶段所有的输入都应该处理了。这里在输入没有传递到上层允许修改。例如: 在MT4j中,每一个新的场景创建都会自动注册一个全局的输入处理器,检查如果输入的位置有一个组件,就设置这个组件为输入事件响应目标对象。

第二个阶段位于组件处理级。这里允许处理输入的目标是一个组件。当然,多点触控手势像旋转(rotation-)和比例手势(缩放)会被识别,例如,这些组件的输入处理器可以注册任何组件模块化。全局的(global-)和组件输入器都是可以扩展和自定义的。如果有了多点触控手势标准,输入处理器发出一个包含有相关的识别手势组件所需要的信息的手势事件,传递到响应的时间监听器。当相应的监听器收到响应的事件会做出相应的动作:相应组件修改其行为或者外表。

展现层

MT4j提供了一种灵活的方法来创建自定义和丰富的多媒体用户界面。为此,MT4j包含了图形原语到更复杂的用户界面widgets的图形元件,旨在用于二维和三维应用开发。

场景

为了组织一个MT4j的应用程序各个方面引入了“sences”的概念。场景单独封装和干净的输入处理和一个从另一个应用程序方面的介绍。例如一个游戏中使用了场景,有一个菜单场景和游戏场景含有不同的业务逻辑和接口。场景之间可以切换,场景变化可以被触发。

 

组件

在MT4j,图形用户界面是基于等级结构组件,允许用户界面组件树结构组成通常被称为'场景图'来。基组件类提供了类似的组件构成的基本功能,也没有可显示的展现。这个基组件经常被用作组组件。子类可以通过重写,然后添加绘制方法使之可见的展现。包括可视化组件是原始形状的组件(如矩形,多边形,椭圆形,线)以及更复杂的用户界面组件。更复杂的用户界面组件往往是基于原始的形状和功能,如图像,提供与常用的图像文件格式支持渲染,可伸缩矢量图形渲染或3D模型渲染。当创建一个自定义的组件,大部分的功能都将被重用。自定义组件可以建立在已有的功能(例如命中检测,姿态处理,定位),通过组合原始形状和可用的用户界面组件变成更复杂的组件。

画布

每一个场景中MT4j根组件是就是画布。这是一个有特殊功能的组件和链接着全局输入层和展现层的活动。所有的输入事件通过画布组件,然后进一步传播事件到目的地。此外,它还含有检查的组件位于指定的屏幕位置和递归过程将责任传递给所有子元素的方法。

渲染

 

对于MT4j组件渲染,Processing工具被使用。processing是一个开源的数据可视化,交互艺术创作和计算的目的Java工具包,并且它有一个非常活跃的社区。它提供了一个访问绘图和可视化功能简单的语法,并包含许多有用的工具。通过使用渲染抽象层,就可以选择不同的渲染。有软件和硬件提供加速渲染。

 

事件的传播和处理

所有的事件源都来自某一个注册的输入源。这些输入事件被传递给当前活动的场景的输入处理器。所有的输入将会被解释,修改和分析。全局的手势dont属于任何特殊的组件也可以被检测到。一个场景通过registerGlobalInputProcessor(...)注册一个新的全局输入处理器。

如果一个全局的输入处理器被注册了,注册了的场景中的画布会添加一个监听器去自动的接受和处理从输入处理器(input processors)传来的所有事件。自定义的监听器也可以添加。当收到一个输入事件,画布会检查哪个是事件的目标对象并传播这个事件去调用目标对象的processInputEvent(MTInputEvent et)方法。如果这个事件没有目标对象,事件将不会再传播。当收到了,目标组件会将输入事件传递给注册监听这个事件的监听器。组件通过添加addInputListener(MTInputEvent e)就能够监听所有的事件了进行处理了。

组件输入处理器,一个解释和分析输入事件的组件通过组件使用registerInputProcessor(inputprocessor)方法注册的组件。这个组件输入处理器将会随后监听这个组件收到的所有的事件。这个组件输入处理器被用来处理MT4j检测大部分多点触控手势如:拖动手势和旋转手势。

如果一个特殊的输入模式或条件得到满足,这个输入处理器会发出手势事件。这些手势事件会传递给拥有processGestureEvent(GestureEvent e)方法的组件。组件分发这些手势给相应的手势事件监听器。

一个调用了addGestureListener(gestureEvtSender ,listener) 的组件会监听到所有的手势事件。方法中这个组件的输入处理器作为第一个参数,GestureEventListener 的实例作为第二个参数。

 

一个组件中的一个输入处理器的功能展现,下面的两个步骤必须采取:

 1、为这个组件注册这个输入处理器

 2、为这个组件添加事件监听器监听输入处理器的手势事件。

据推测,该应用程序至少有一个输入源登记了。

 作为一个例子,建立多触点组件的拖放功能,可以通过以下代码:

Java代码 复制代码
  1. component.registerInputProcessor(new DragProcessor(mtApplication));   
  2.     
  3. component.addGestureListener(DragProcessor.classnew IGestureEventListener() {   
  4.     public boolean processGestureEvent(MTGestureEvent ge) {   
  5.         DragEvent de = (DragEvent)ge;   
  6.         de.getTargetComponent().translateGlobal(de.getTranslationVect());   
  7.         return false;   
  8.     }   
  9. });  
component.registerInputProcessor(new DragProcessor(mtApplication));
 
component.addGestureListener(DragProcessor.class, new IGestureEventListener() {
	public boolean processGestureEvent(MTGestureEvent ge) {
		DragEvent de = (DragEvent)ge;
		de.getTargetComponent().translateGlobal(de.getTranslationVect());
		return false;
	}
});

 

大部分的组件已经有了 拖动、旋转和缩放的处理器,结合已经安装好的事件监听器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值