跳转至

InputPlugin输入管理器

参看可用的事件清单

官方文档:Phaser.Input.InputPlugin

输入插件(InputPlugin)属于一个场景,为场景处理所有输入相关的事件、操作。 在场景中通过this.input控制/引用输入插件。

它直接发送事件。例如监听游戏画布的热点点击(pointerdown)事件:

this.input.on('pointerdown', callback, context);

调用游戏对象的setInteractive方法以开启输入,以发送事件:

var sprite = this.add.sprite(x, y, texture);
sprite.setInteractive();
sprite.on('pointerdown', callback, context);

new InputPlugin(scene)#

实例化。

Extends#

Phaser.Events.EventEmitter

Members#

activePointer/活动输入点#

activePointer :Phaser.Input.Pointer

当前活动的输入点。

cameras/相机管理器#

cameras :Phaser.Cameras.Scene2D.CameraManager

指向场景的相机管理器。

displayList/显示列表#

displayList :Phaser.GameObjects.DisplayList

指向场景显示列表。

dragDistanceThreshold/拖拽距离阈值#

dragDistanceThreshold :number

判定热点正被拖拽的距离阈值,以像素计。

dragTimeThreshold/拖拽时间阈值#

dragTimeThreshold :number

判定热点正被拖拽的时间阈值,以毫秒计。

enabled/开始输入#

enabled :boolean

开启输入,这时输入插件每帧循环更新。

gamepad/游戏手柄#

gamepad :Phaser.Input.Gamepad.GamepadPlugin

GamepadPlugin类的实例。也可以通过GameConfig属性设置。

keyboard/键盘#

keyboard :Phaser.Input.Keyboard.KeyboardPlugin

KeyboardPlugin类的实例,用以生成Key对象,监听指定的键盘事件。也可以通过GameConfig属性设置。

manager/游戏输入管理器#

manager :Phaser.Input.InputManager

指向游戏输入管理器。

mouse/鼠标#

mouse :Phaser.Input.Mouse.MouseManager

指向鼠标管理器。只有在游戏Configuration文件中开启鼠标支持后,才能设置本属性。 如果你只是想使用鼠标热点,那么请用mousePointer属性。

mousePointer/鼠标热点#

mousePointer :Phaser.Input.Pointer

鼠标拥有自己独特的Pointer对象,如果做桌面类游戏,能直接引用到。 如果打算同时支持桌面与触摸设备,这时不要使用本属性,而要用activePointer,它将始终指向最近的交互热点。

pointer1/热点1#

pointer1 :Phaser.Input.Pointer

基于触摸的热点(Pointer)对象。 默认undefined,除非你用addPointer添加一个Pointer。 下同,共十个触点。

pointer2/热点2#

pointer2 :Phaser.Input.Pointer

pointer3/热点3#

pointer3 :Phaser.Input.Pointer

pointer4/热点4#

pointer4 :Phaser.Input.Pointer

pointer5/热点5#

pointer5 :Phaser.Input.Pointer

pointer6/热点6#

pointer6 :Phaser.Input.Pointer

pointer7/热点7#

pointer7 :Phaser.Input.Pointer

pointer8/热点8#

pointer8 :Phaser.Input.Pointer

pointer9/热点9#

pointer9 :Phaser.Input.Pointer

pointer10/热点10#

pointer10 :Phaser.Input.Pointer

pollRate/轮询间隔#

pollRate :integer

热点检查/轮询频率。单位是毫秒。如果用户已经移动、按下或释放过热点,那么热点一定得到检查。本属性仅仅控制未更新时的检查频率。 如果你希望游戏对象相应于热点持续更新,即使热点本身未动,也要设置本属性。 设为0将持续轮询。设为-1将只根据用户的移动轮询。缺省值是-1。

scene/所属场景#

scene :Phaser.Scene

指向输入插件所负责的场景。

settings/所属场景设置#

settings :Phaser.Scenes.Settings.Object

指向场景的系统设置。

systems/所属场景系统#

systems :Phaser.Scenes.Systems

指向场景的系统类。

topOnly/仅顶层交互#

topOnly :boolean

设为true(默认值)时,输入插件将模仿DOM的行为,只从显示列表最顶层的游戏对象发出事件。 如果设为fals,则将从热点下的所有游戏对象发出事件,而不限于顶层的一个。

x/热点x值#

x :number

活动热点(ActivePointer)的x坐标,根据摄像头列表中的第一个摄像头计算。 如果你的游戏只有一个非变形摄像头,且未使用多个触点,那么这是唯一可安全使用的。

y/热点y值#

y :number

活动热点(ActivePointer)的y坐标,根据摄像头列表中的第一个摄像头计算。 如果你的游戏只有一个非变形摄像头,且未使用多个触点,那么这是唯一可安全使用的。

Methods#

addListener/添加监听器#

addListener(event, fn [, context])

就指定事件添加监听器。

addPointer/添加热点#

addPointer( [quantity])

添加新的热点(Pointer)对象到输入管理器中。默认生成两个热点对象: mousePointerpointer1。 可以生成更多,通过调用本方法,或在游戏配置中设置input.activePointers属性,最多可达10个热点。

10个热点通过此方法添加好后,可以通过InputPlugin.pointerX属性获取。

clear/清空游戏对象的相关交互对象#

clear(gameObject)

清空一个游戏对象的相关交互对象。 然后游戏对象排队等待下一次更新时从输入插件中移除。

disable/关闭游戏对象的输入#

disable(gameObject)

关闭一个游戏对象的输入。 关闭输入的游戏对象仍旧持有交互对象组件,还可以重新打开输入,方法是随时传递给InputPlugin.enable方法。

emit/调用事件的监听器#

emit(event [, args])

调用给定事件的所有已注册的监听器。

enable/开启游戏对象的输入#

enable(gameObject [, shape] [, callback] [, dropZone])

开启一个游戏对象的互动功能。 如果游戏对象已经有互动对象组件,那么组件将激活并返回。 否则,生成新的互动对象组件,并分配到游戏对象的输入属性中。

输入通过点击区域起作用,一般都用几何形状如方形、圆形,给游戏对象作点击区域。 不过,如果要处理更高级的输入检测,也可以提供你自己的点击区域形状、回调函数。 如果没有提供参数,将尝试基于游戏对象所用的纹理框架生成一个方形点击区域。 如果不是纹理边框对象(如GraphicsBitmapText对象),将无法生成,这时你需要提供指定的形状供它使用。

你也可以提供一个输入配置对象作为唯一参数。

eventNames/事件数组#

eventNames()

返回一个数组,列出在事件发生器中注册过监听器的所有事件。

hitTestPointer/热点点击测试#

hitTestPointer(pointer)

接收一个给定热点,对它执行一个点击测试,看看下面是哪些互动游戏对象。

点击测试针对热点下所有摄像头都予以执行。如果下面是多重镜头,先从镜头列表的最顶层一个检测,如果没有发现,再往下依次重复。

isActive/活性检测#

isActive()

检测本插件及其所属场景是否都是活动的。

listenerCount/监听器计数#

listenerCount(event)

返回给定事件的监听器数量。

listeners/监听器列表#

listeners(event)

返回就给定事件所注册的所有监听器。

makePixelPerfect/开启像素完美#

makePixelPerfect( [alphaTolerance])

生成一个函数,以传递给setInteractive, enablesetHitArea, 它将处理基于ImageSprite的游戏对象上的像素完美(pixel-perfect,完美地基于像素)的输入检测。 如下将生成一个精灵,它的所有透明度大于等于1的所有像素都可点击。

this.add.sprite(x, y, key).setInteractive(this.input.makePixelPerfect());

如下将生成一个精灵,它的有所透明度大于150的像素都可以点击。

this.add.sprite(x, y, key).setInteractive(this.input.makePixelPerfect(150));

一旦你做了一个像素完美的互动对象,将影响它的所有与输入有关的事件:down, up, dragstart, drag, 等等。

因为热点与游戏对象互动时,将持续地对纹理进行轮询,从给定坐标中抽取一个像素,检测他的色值。 这是高消耗的过程,所以应该只在确实需要的游戏对象上才运用。

无法在非纹理基础的游戏对象上实现像素完美效果。所以这无法在Graphic, BitmapText, RenderTexture, Text, Tilemap, ContainerParticle上起效。

off/移除事件监听器#

off(event, fn, context, once)

移除给定事件的监听器。

on/添加事件监听器#

on(event, fn [, context])

为给定事件添加监听器。

once/添加一次性事件监听器#

once(event, fn [, context])

为给定事件添加一次性监听器。

removeAllListeners/移除所有监听器#

removeAllListeners( [event])

移除所有监听器,或只针对就给定事件。

removeListener/移除给定事件的监听器#

removeListener(event, fn, context, once)

移除给定事件的所有监听器。

setDefaultCursor/设置光标#

setDefaultCursor(cursor)

通知输入系统设置客户定制光标。这个光标将作为默认光标,用于与游戏画布互动时。

如果互动对象也设置了客户定制光标,那么它用过之后将重置为这里设置的光标。

任何有效的CSS光标值可以,也包括指向图像文件的路径,等等。

this.input.setDefaultCursor('url(assets/cursors/sword.cur), pointer');

请看各浏览器对文件格式、大小的不同支持:

CSS - cursor

Using_URL_values_for_the_cursor_property

由你决定选取合适的光标格式,以便在你需要支持的各浏览器上都起效。

setDraggable/设置可否拖拽#

setDraggable(gameObjects [, value])

就给定有序对象数组设置可否拖拽。 可以全设置为可以拖拽,或者传递false值以移除所有许可。 游戏对象指定可拖拽后才会发出拖拽事件。

setGlobalTopOnly/设置顶层捕获#

setGlobalTopOnly(value)

如果设置为true,全局的输入管理器将模仿DOM行为,只从显示列表最顶层的游戏对象发出事件。 如果设置为false,它将从热点下的所有游戏对象发出事件,而不只是最顶层的一个。

setHitArea/设置点击区#

setHitArea(gameObjects [, shape] [, callback])

就给定的游戏对象数组设置点击区域。 典型的点击区域是Phaser提供的几何形状,比如Phaser.Geom.RectanglePhaser.Geom.Circle。 不过,也可以是对给定回调函数起效的任何对象。

如果没有提供点击区域,将基于游戏对象的尺寸生成一个方形,如果可以算出的话。

点击区域回调(HitAreaCallback)是一个函数,它接收xy坐标值,根据坐标值是否位于形象的范围内返回一个布尔值。 所有Phaser几何对象都提供这种函数,比如Phaser.Geom.Rectangle.Contains

setHitAreaCircle/设置圆形点击区#

setHitAreaCircle(gameObjects, x, y, radius [, callback])

就给定游戏对象数组设置点击区域为Phaser.Geom.Circle形状(圆), 使用给定的坐标、半径以控制其位置和大小。

setHitAreaEllipse/设置椭圆点击区#

setHitAreaEllipse(gameObjects, x, y, width, height [, callback])

就给定游戏对象数组设置点击区域为Phaser.Geom.Ellipse形状(椭圆), 使用给定的坐标、尺寸以控制其位置和大小。

setHitAreaFromTexture/按纹理设置点击区#

setHitAreaFromTexture(gameObjects [, callback])

为游戏对象数组设置点击区域为Phaser.Geom.Rectangle形状(方形), 使用游戏对象的纹理边框来界定点击区域的位置和大小。

setHitAreaRectangle/设置方形点击区#

setHitAreaRectangle(gameObjects, x, y, width, height [, callback])

为游戏对象数组设置点击区域为Phaser.Geom.Rectangle形状(方形), 使用给定的坐标、尺寸以控制其位置和大小。

setHitAreaTriangle/设置三角点击区#

setHitAreaTriangle(gameObjects, x1, y1, x2, y2, x3, y3 [, callback])

为游戏对象数组设置点击区域为Phaser.Geom.Triangle形状(三角形), 使用给定的坐标、尺寸以控制其位置和大小。

setPollAlways/设置始终轮询的热点#

setPollAlways()

设置始终轮询的热点(Pointer)。 轮询一个热点时,运行一次点击测试以观察它下面是哪些游戏对象, 或是哪些对象与它互动,不管热点实际上有没有移动。

如果你希望游戏中的对象发出事件,而对象在持续移动,而热点可能没有动,这时你应该开启本项。 每帧轮询需要额外算力消耗,游戏中有大量互动对象时尤其如此。

setPollOnMove/设置移动与更新时轮询的热点#

setPollOnMove()

设置移动或更新时只轮询的某些热点。 轮询一个热点时,运行一次点击测试以观察它下面是哪些游戏对象, 或是哪些对象与它互动。

setPollRate/设置轮询速率#

setPollRate(value)

设置轮询速率。即再次轮询热点时已经过去的时间。 请看setPollAlwayssetPollOnMove方法。

setTopOnly/设置顶层捕获#

setTopOnly(value)

如果设置为true,输入插件将模仿DOM行为,只从显示列表最顶层的游戏对象发出事件。 如果设置为false,它将从热点下的所有游戏对象发出事件,而不只是最顶层的一个。

sortGameObjects/对象排序#

sortGameObjects(gameObjects)

给一个游戏对象数组,排序后返回,使游戏对象按深度索引值排序,最低的在最下面。

stopPropagation/停止广播#

stopPropagation()

使输入管理器在余下的游戏步骤里,停止发出任何事件。

published from :Phaser 3 API Documentation - Class: InputPlugin