Phaser:在精灵上附加触摸事件

10

我是phaser的新手,现在正在使用phaser v.2.0.7。我想要做的是让一个精灵处理触摸事件。

如何将onTap附加到精灵对象上?

我知道可以使用sprite_obj.events.onInputDown进行触摸事件,但是我仍然使用onInputUp,因为当弹出窗口/模态框(警报)在onInputDown之后出现时,需要再次单击才能使事件监听器再次起作用。(我的个人解决方法是使用inInputUp。)

我尝试过的另一件事是在我的画布对象上添加onTapcanvas.input.onTap.add,但我认为这不能实现我的目标。是的,它现在可以处理触摸事件,但问题是我只想将触摸事件限制在画布上的精灵图像上,而不是整个画布。

有人能帮帮我吗。谢谢。

2个回答

24

首先,您需要启用精灵的输入:

sprite.inputEnabled = true;

然后,您可以监听精灵在输入过程中分派的任何事件,例如:

sprite.events.onInputDown.add(onDown, this);

...

function onDown(sprite, pointer) {
 // do something wonderful here
}

回调函数接收两个参数:Sprite和导致输入事件的Pointer(在多输入系统中,这可能经常变化)。

Pointer有很多属性可以访问,例如它被放置下来的时间、移动历史等。详见Pointer文档

Sprite有很多事件,但以下是与输入相关的(这是从Phaser源代码中直接提取的):

/**
* @property {Phaser.Signal} onInputOver - This signal is dispatched if the parent is inputEnabled and receives an over event from a Pointer.
* @default null
*/
this.onInputOver = null;

/**
* @property {Phaser.Signal} onInputOut - This signal is dispatched if the parent is inputEnabled and receives an out event from a Pointer.
* @default null
*/
this.onInputOut = null;

/**
* @property {Phaser.Signal} onInputDown - This signal is dispatched if the parent is inputEnabled and receives a down event from a Pointer.
* @default null
*/
this.onInputDown = null;

/**
* @property {Phaser.Signal} onInputUp - This signal is dispatched if the parent is inputEnabled and receives an up event from a Pointer.
* @default null
*/
this.onInputUp = null;

/**
* @property {Phaser.Signal} onDragStart - This signal is dispatched if the parent is inputEnabled and receives a drag start event from a Pointer.
* @default null
*/
this.onDragStart = null;

/**
* @property {Phaser.Signal} onDragStop - This signal is dispatched if the parent is inputEnabled and receives a drag stop event from a Pointer.
* @default null
*/
this.onDragStop = null;

谢谢,但我不能使用onInputDown :( 为什么?因为它与弹出窗口(如alert()和bootstrap modal)存在问题,这在此问题中有描述:http://www.html5gamedevs.com/topic/4355-click-on-an-image-not-working/ - Vainglory07
当我在画布上单击精灵图像时出现问题,我会将错误显示为模态框。这就是 onInputDown 问题所在的地方。因此,我没有捕获 DOM 事件。我仅仅依赖于 Phaser 输入事件。对于我的糟糕英语表示抱歉。谢谢。 - Vainglory07
但之后似乎画布失去了焦点。因为在关闭弹出窗口后,单击一次画布不会触发监听器。然后如果您再次单击它就可以了。就像我在上面链接中提到的alert();问题一样。谢谢。 - Vainglory07
2
当然,焦点会回到你显示的DOM对象。但这并不意味着在关闭它时不能将其重新设置回画布。 - PhotonStorm
2
如果我没有表达清楚,你可以在关闭模态框后执行 game.canvas.focus() 来将焦点重新设置回游戏。 - PhotonStorm
显示剩余3条评论

0

你试过这个吗?this.input.onDown.add(obj.method,obj);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接