WorldWind Java 版学习:8、事件响应

1、在 WWPanelImpl 构造时,会调用 createView 构造一个 View 对象,此处是 BasicOrbitView 对象,在构造 BasicOrbitView 对象的时候,会构造一个 ViewInputHandler 对象,此处为 OrbitViewInputHandler 对象
WWPanelImpl.<init>(Registry) line: 35
WorldWindowGLCanvas.<init>() line: 96
WorldWindowGLCanvas.createView() line: 236
BasicOrbitView.<init>() line: 34
OrbitViewInputHandler.<init>() line: 55
OrbitViewInputHandler(BasicViewInputHandler).<init>() line: 518
OrbitViewInputHandler(AbstractViewInputHandler).<init>() line: 116

2、在 WWPanelImpl 构造时,会调用 createDefaultInputHandler 构造 InputHandler 对象,此处是 AWTInputHandler 对象,该对象实现了鼠标键盘事件的一些响应函数,然后调用 setEventSource 方法为 WorldWindowGLCanvas 对象添加响应函数,当接收到鼠标键盘事件后,会在 AWTInputHandler 中得到响应
WWPanelImpl.<init>(Registry) line: 35
WorldWindowGLCanvas.<init>() line: 97
WorldWindowGLCanvas.createDefaultInputHandler() line: 242
WorldWindowGLCanvas.setInputHandler(InputHandler) line: 257
AWTInputHandler.setEventSource(WorldWindow) line: 139

3、接收到鼠标键盘事件时,比如左键拖动,会先由 AWTInputHandler 对象接收,然后传递给 OrbitViewInputHandler 做响应
AWTInputHandler.mouseDragged(MouseEvent) line: 487
OrbitViewInputHandler(AbstractViewInputHandler).mouseDragged(MouseEvent) line: 592
OrbitViewInputHandler(BasicViewInputHandler).handleMouseDragged(MouseEvent) line: 727
OrbitViewInputHandler(BasicViewInputHandler).callMouseActionListListeners(MouseEvent, ViewInputAttributes$ActionAttributes$ActionTrigger, ViewInputAttributes$ActionAttributesList) line: 821
BasicViewInputHandler$HorizTransMouseActionListener.inputActionPerformed(AbstractViewInputHandler, MouseEvent, ViewInputAttributes$ActionAttributes) line: 319
OrbitViewInputHandler.onHorizontalTranslateRel(double, double, double, double, ViewInputAttributes$DeviceAttributes, ViewInputAttributes$ActionAttributes) line: 208
OrbitViewInputHandler.onHorizontalTranslateAbs(Angle, Angle, ViewInputAttributes$ActionAttributes) line: 154
OrbitViewInputHandler.setCenterPosition(BasicOrbitView, AnimationController, Position, ViewInputAttributes$ActionAttributes) line: 512

4、在 applyView 方法中计算相机的位置,然后计算相机的高度和相机对应地面的高度,然后依据这两个值判断是否发生碰撞,然后为相机设置最终位置,这里有个 bug,因为是以相机对应地面的点为参照点的,所以在靠近地面时,碰撞检测的结果是正确的,但是当靠近地面且有地型时,前后左右移动时,碰撞检测的结果就可能不正确,从而发生进入地型的结果
StereoOptionSceneController(BasicSceneController).doRepaint(DrawContext) line: 19
StereoOptionSceneController(AbstractSceneController).applyView(DrawContext) line: 469
BasicOrbitView(BasicView).apply(DrawContext) line: 165
OrbitViewInputHandler.apply() line: 420
AnimationController.stepAnimators() line: 78
OrbitViewCenterAnimator(MoveToPositionAnimator).next() line: 36
OrbitViewCenterAnimator(BasicAnimator).set(double) line: 66
OrbitViewCenterAnimator.setImpl(double) line: 88
OrbitViewPropertyAccessor$CenterPositionAccessor.setPosition(Position) line: 72
BasicOrbitView.setCenterPosition(Position) line: 137
BasicOrbitView.resolveCollisionsWithCenterPosition() line: 283
OrbitViewCollisionSupport.computeCenterPositionToResolveCollision(BasicOrbitView, double, DrawContext) line: 144
OrbitViewCollisionSupport.computeViewHeightAboveSurface(DrawContext, Matrix, Angle, Rectangle, double) line: 232

转载于:https://www.cnblogs.com/redfler/archive/2012/11/12/2766023.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值