当执行“点击”事件时,将对象的“可见”设置为“真”,然后将其设置回“假”

Set object's `visible` to `true` when a `tap` event is performed then set it back to `false`

我的 Flash 时间轴上有一个对象 MovieClip 和一个按钮 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);
}

我认为这段代码可行。

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

在讨论您的问题之前,让我们先看一下 TouchEvent.TOUCH_BEGINTouchEvent.TOUCH_ENDTouchEvent.TOUCH_TAP 事件的定义:

Dispatched when the user first contacts a touch-enabled device ...

Dispatched when the user removes contact with a touch-enabled device ...

Dispatched when the user lifts the point of contact over the same InteractiveObject instance on which the contact was initiated on a touch-enabled device ...

通过一些测试,我们可以看到 TouchEvent.TOUCH_END 事件在大多数情况下会在 之前 触发 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);    
}

希望能帮到你。