当执行“tap”事件时,将对象的“visible”设置为“true”,然后将其设置回“false”

时间:2016-07-07 12:05:16

标签: actionscript-3 flash

我有一个MovieClip对象,我的Flash时间轴上有一个Button按钮。

点击按钮时,我想将object.visible设置为true,然后当未点按该按钮时,我想将其设置为false。

我该怎么做?

我已经尝试过这段代码,但它无法正常运行。我只能展示对象但不能隐藏它。

button1.addEventListener(TouchEvent.TOUCH_TAP, touchTap);

function touchTap(e:TouchEvent): void {
    mcObj.visible = true;
    stage.addEventListener(TouchEvent.TOUCH_END, touchEnd);
}

function touchEnd(e:TouchEvent): void {
   mcObj.visible = false;
   stage.removeEventListener(TouchEvent.TOUCH_END, touchEnd);
}

2 个答案:

答案 0 :(得分:2)

我认为这段代码可行。

button1.addEventListener(TouchEvent.TOUCH_BEGIN, touchTap);

function touchTap(e:TouchEvent): void {
    mcObj.visible = true;
    button1.addEventListener(TouchEvent.TOUCH_END, touchEnd);
}

function touchEnd(e:TouchEvent): void {
   mcObj.visible = false;
   button1.removeEventListener(TouchEvent.TOUCH_END, touchEnd);
}
我改变了 1:TouchEvent.TOUCH_TAPTouchEvent.TOUCH_BEGIN
2:stage.addEventListenerbutton1.addEventListener

答案 1 :(得分:1)

在说出您的问题之前,让我们先了解TouchEvent.TOUCH_BEGINTouchEvent.TOUCH_ENDTouchEvent.TOUCH_TAP事件的定义:

  

用户首次联系启用触摸的设备 ...

时调度
  

用户移除与启用触摸的设备的联系 ...

时调度
  

用户通过在启用触摸的设备上启动联系人的同一InteractiveObject实例上提升联系人时调度 ...

通过一些测试,我们可以看到TouchEvent.TOUCH_END事件在几乎情况下会在<{strong> TouchEvent.TOUCH_TAP之前<强>>(1或2毫秒),因此我们可以理解,我们能够检测用户是否已经删除了与设备的联系(TouchEvent.TOUCH_END被触发)然后,如果它位于同一个InteractiveObject对象上联系已启动(TouchEvent.TOUCH_TAP已触发)。

这就是你的代码无效的原因。

现在,让我们看看你的问题:当你的用户点击一个按钮时,你想要显示一个MovieClip,并在他释放该按钮时隐藏它,但只是很短的时间(点击的时间〜= 300毫秒)。

在这种情况下,我建议您使用带有超时的TouchEvent.TOUCH_BEGIN事件监听器来隐藏该对象,即使您的用户没有释放该按钮。

为此,请举例:

Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;

btn.addEventListener(TouchEvent.TOUCH_BEGIN, on_touchBegin);
function on_touchBegin(e:TouchEvent): void 
{
    obj.visible = true;
    hide_obj();
}

function hide_obj(): void 
{
    // you can use a Timer object instead of setTimeout()
    var timeout:int = setTimeout(function(){
        clearTimeout(timeout);
        obj.visible = false;
    }, 300);    
}

希望可以提供帮助。