我正在使用 starling 框架,来模拟 onclick 方法,我使用以下代码:
if(e.getTouch(this).phase == TouchPhase.ENDED){
//Some code
}
没关系,但是如果鼠标不再在按钮上方,它也会触发,但是我希望它仅在它结束时才调度。有什么办法可以做到这一点?谢谢
在代码中,“this”是一个 Sprite,这有点无关紧要
我正在使用 starling 框架,来模拟 onclick 方法,我使用以下代码:
if(e.getTouch(this).phase == TouchPhase.ENDED){
//Some code
}
没关系,但是如果鼠标不再在按钮上方,它也会触发,但是我希望它仅在它结束时才调度。有什么办法可以做到这一点?谢谢
在代码中,“this”是一个 Sprite,这有点无关紧要
简单的方法是使用 starling.display.Button 来做到这一点。他们调度触发事件,这基本上是你想要的。“不太容易”的方法是通过复制 Button 中实际完成的操作来跟踪您的触摸:
private function onTouch(event:TouchEvent):void
{
var touch:Touch = event.getTouch(this);
if (!mEnabled || touch == null) return;
if (touch.phase == TouchPhase.BEGAN && !mIsDown)
{
//equivalent to MOUSE_DOWN
mIsDown = true;
}
else if (touch.phase == TouchPhase.MOVED && mIsDown)
{
// reset button when user dragged too far away after pushing
var buttonRect:Rectangle = getBounds(stage);
if (touch.globalX < buttonRect.x - MAX_DRAG_DIST ||
touch.globalY < buttonRect.y - MAX_DRAG_DIST ||
touch.globalX > buttonRect.x + buttonRect.width + MAX_DRAG_DIST ||
touch.globalY > buttonRect.y + buttonRect.height + MAX_DRAG_DIST)
{
mIsDown = false;
}
}
else if (touch.phase == TouchPhase.ENDED && mIsDown)
{
mIsDown = false;
//this is a click
dispatchEventWith(Event.TRIGGERED, true);
}
}
您必须更改 buttonRect 代码以反映您的精灵的形状,但基本上就在这里。
根据文档,如果当前正在触摸目标,则该类的interactsWith(target:DisplayObject)
方法应返回 true。我无法测试这个理论,但以下应该有效:TouchEvent
if (e.getTouch(this).phase == TouchPhase.ENDED && e.interactsWith(this)) {
//The touch ended on the same DisplayObject as it originated at
}
这个想法怎么样:
if ( e.getTouch( this ).phase == TouchPhase.ENDED ) {
if ( this.hitTestPoint( stage.mouseX, stage.mouseY, true ) ) {
// Some code
}
}