跳转至

Phaser.Input. Pointer#

Pointer对象包裹了Phaser的鼠标输入和触摸输入。

默认生成两个热点。如果需要多触点,可以用InputPlugin.addPointer方法来添加,而不是直接实例化Pointer类——输入系统不会管理这样的实例。

通过InputPlugin.activePointer引用当前活动的热点。也可以使用InputPlugin.pointer1pointer10这些资源,只要已经激活。

new Pointer(manager, id)#

Members#

active :boolean#

是否激活。鼠标是默认激活的。

angle :number#

当前运动角度(弧度)。与按键状态无关。

button :number#

最近的up/down事件中按键标号。如果是触摸设备则始终是0。

buttons :number#

  • 0: 没有按键或未初始化;
  • 1: 左按键;
  • 2: 右按键;
  • 4: 滚轮按键,或中按键;
  • 8: 第四按键(特别是"浏览器的后退"按键)
  • 16: 第五按键 (特别是"浏览器的前进"按键)

配置为左利手的鼠标,按键行为是反的。这时,这些值则从右到左读取。

camera :Phaser.Cameras.Scene2D.Camera#

与热点在最后一次更新时互动的相机。

热点一时只能与一个相机互动,即列表最上层的那个相机。

deltaX :number#

用户移动鼠标滚轮或类似输入设备而形成的水平滚动(scroll)量。

deltaY :number#

参考deltaX。如果用户向上滚动则小于0,向下滚则大于0。

deltaZ :number#

Z轴滚动量。

distance :number#

热点移动的距离。每帧(根据motionFactor)做一次平滑运算。

不考虑热点是否移动,也不考虑按键状态。即只考虑运动。

如果要获取前次按下按键以来的总距离,请使用Pointer.getDistance方法。

downElement :any#

热点按下时集中的DOM元素,取自DOM事件。默认情况下是Phaser渲染所用的Canvas,或者Window元素。

downTime :number#

按键或触摸首次按下时的事件时间戳,用于拖拽对象。

downX :number#

按键1(左键)或触摸按下时的热点的X坐标,用于拖拽对象。

downY :number#

参考downX。

event :TouchEvent|MouseEvent#

热点处理的最近一次DOM事件。

id :number#

热点的内部ID。

identifier :number#

热点的标识符,这是热点启动时由DOM事件设置的。

isDown :boolean#

热点是否有按键按下。

locked :boolean#

热点是否锁定。

只有鼠标可被锁定;通过浏览器的热点锁定API请求锁定。你可以通过pointerdown/pointerup事件处理器,用this.input.mouse.requestPointerLock()方法来请求锁定。

manager :Phaser.Input.InputManager#

对输入管理器的引用。

motionFactor :number#

每帧都应用于运动平滑运算的因数。

此值应用于Smooth Step Interpolation(平滑步进插值算法),此算法用于计算热点的速度(velocity)、角度(angle)、距离(distance)。此值每帧应用一次,直到midPoint抵达当前热点位置为止。0.2是教好的平衡点。如果需要更新得更快,且运算环境更好,那么可以提高此值。请勿设置为0。

movementX :number#

如果鼠标已经锁定,即指最后一帧以来的热点的水平相对运动量。

movementY :number#

参考movementX。

moveTime :number#

热点最近一次移动的时间(不考虑按键状态)。

pointerId :number#

热点ID,在热点启动时由DOM时间设置。浏览器会回收重用此值。

position :Phaser.Math.Vector2#

热点在屏幕空间中的位置。

prevPosition :Phaser.Math.Vector2#

热点先前在屏幕空间中的位置。

InputManager.transformPointer调用过程中,先前的x、y值存储在此。

可以用velocity, angle and distance等来建立自己的手势识别。

primaryDown :boolean#

主键(通常是button 0、鼠标左键)是否按下。

smoothFactor :number#

应用于热点位置的平滑因数。

Due to their nature, pointer positions are inherently noisy. While this is fine for lots of games, if you need cleaner positions then you can set this value to apply an automatic smoothing to the positions as they are recorded.

The default value of zero means 'no smoothing'. Set to a small value, such as 0.2, to apply an average level of smoothing between positions. You can do this by changing this value directly, or by setting the input.smoothFactor property in the Game Config.

只有热点移动时,位置才经过平滑处理。如果热点的主键进入Up或Down状态,那么位置就取精确值,而不去平滑值。

time :number#

DOM事件最近更新热点的时间。直接来自event.timeStamp属性。如果没有事件发生,则返回0。

upElement :any#

热点释放时所在的DOM元素,取自DOM事件。默认为Phaser渲染所用的Canvas,或Window元素。

upTime :number#

按键、触摸输入最后释放时的事件时间戳,用于拖拽对象。

upX :number#

参考upTime。

upY :number#

参考upTime。

velocity :Phaser.Math.Vector2#

热点的当前速度,它基于当前和先前的位置。

此值根据motionFactor,每帧进行平滑处理。

不管热点是否移动,按键状态如何,此值都会更新。即只考虑运动,不考虑按键。

wasCanceled :boolean#

热点是否已被touchcancel事件取消。

wasTouch :boolean#

前一个输入事件是否来自触摸输入(非鼠标输入)。

worldX :number#

热点的x位置,此值已换算到最近与热点之交互的相机的坐标空间。

如果要在事件处理器外使用此值,你要预先调用Pointer.updateWorldPoint方法更新它。

worldY :number#

参考worldX。

x :number#

热点在屏幕空间中的x位置。要使用在相机空间的位置,参考worldX。

y :number#

参考x。

Methods#

backButtonDown()#

检查热点的back button是否按下。

backButtonReleased()#

参考backButtonDown()。

destroy()#

销毁热点实例,重置其外部引用。

forwardButtonDown()#

参考backButtonDown()。

forwardButtonReleased()#

参考backButtonDown()。

getAngle()#

获取基于前后位置的角度。

如果此方法被调用时热点有按键被按下,它将返回从热点按下位置面向当前位置的角度。

如果没有按键被按下,它将返回最后记录到的角度,此角度基于按键释放时热点所在的位置。

如果想获得基于热点速度的当前角度,请参考Pointer.angle属性。

getDistance()#

获取基于前后位置的距离。参考getAngle()。

如果想获得基于热点速度的、最近的运行距离,请参考Pointer.distance属性。

getDistanceX()#

参考getDistance()。

getDistanceY()#

参考getDistance()。

getDuration()#

获取基于前后位置的时间。参考getAngle()。

getInterpolatedPosition( [steps] [, out])#

获取插值位置。

根据热点前后的位置生成插入值数组,数组尺寸跟形参teps的尺寸一致。

1
2
3
4
5
var points = pointer.getInterpolatedPosition(4);
// points[0] = { x: 0, y: 0 }
// points[1] = { x: 2, y: 1 }
// points[2] = { x: 3, y: 2 }
// points[3] = { x: 6, y: 3 }

如果你想取得前后位置间的平滑值,可以使用这个数组。DOM热点事件发出的距离常常大于浏览器主循环发出的,这个数组可以帮助你避免匆忙闪避(janky movement),尤其是热点有尾随对象时。

内部使用的平滑步进插值算法(Smooth Step interpolation calculation)。

leftButtonDown()#

参考backButtonDown()。

leftButtonReleased()#

参考backButtonDown()。

middleButtonDown()#

参考backButtonDown()。

middleButtonReleased()#

参考backButtonDown()。

noButtonDown()#

检查热点是否“没有任何按键按下”。

positionToCamera(camera [, output])#

接收一个Camera,返回一个Vector2:包含已经转换到相机空间的热点的位置。用于把热点位置转换到相机空间。

rightButtonDown()#

参考backButtonDown()。

rightButtonReleased()#

参考backButtonDown()。

updateWorldPoint(camera)#

接收一个Camera,更新热点的worldX and worldY值,转换为给定的Camera空间中的值。

请注意,输入事件会自己替换为当时的热点的值,所以可以立即使用。

published from :Phaser 3 API Documentation - Class: Pointer

评论