2013-05-09 3 views
0

Я новичок в AS3/Flash и stackoverflow и попытался просмотреть различные темы с этой проблемой.Fast rollOver на кнопке вызывает другую метку rollOut (кнопка MovieClip)

Моя проблема в том, что, когда я слишком быстро перевернусь на одной из своих кнопок, кнопка перевернется в состояние «Щелчок». У меня есть тестер, который отлаживает строку «hit!», И всякий раз, когда происходит этот сбой, тестер не показывает строку «hit», поэтому я знаю, что она фактически не регистрирует щелчок пользователя.

Интересно, что проблема также возникает, когда я перехожу от нижней или верхней части кнопки к другой стороне по вертикали. Быстрее FPS, похоже, минимизирует эффект, но он все еще там. Я попытался избавиться от своего слоя хитов, считая, что это было виновником проблемы, но даже тогда это ничего не делало.

Я отправлю .fla на случай, если кто-нибудь сможет это понять, по-настоящему оценил бы это, поскольку это заводило меня орехами.

https://dl.dropboxusercontent.com/u/18672917/Main_Btn_7halp6.fla

Вот код, который я использовал в случае, если кто хочет, чтобы понять это исключительно от возможных ошибок кодирования. (Кроме того, better_mc.Hit._visible = ложь; не работает, кажется)

import flash.events.MouseEvent; 

stop(); 

better_mc.addEventListener(MouseEvent.ROLL_OVER, betterOver); 
better_mc.addEventListener(MouseEvent.ROLL_OUT, betterOut); 
better_mc.addEventListener(MouseEvent.CLICK, betterClick); 

function betterOver(evt:MouseEvent):void{ 
    better_mc.gotoAndPlay("Over"); 
    } 

function betterOut(evt:MouseEvent):void{ 
    better_mc.gotoAndPlay(27- (better_mc.currentFrame-10)); 
    } 

function betterClick(event:MouseEvent):void { 
better_mc.gotoAndPlay("Click"); 
} 



better_mc.hitArea = better_mc.Hit; 
better_mc.addEventListener(MouseEvent.MOUSE_DOWN, Hitbox); 
function Hitbox (event:MouseEvent){ 
trace("hit! "+this.name); 

better_mc.Hit._visible = false; 
}; 

ответ

0

Хорошо, понял. это то, что происходит

Вашего расчет на свитке создает проблему

function betterOut(evt:MouseEvent):void{ 
    **better_mc.gotoAndPlay(27- (better_mc.currentFrame-10));** 
    } 

Это выражение иногда возвращает номер кадра 28, который впереди своих «остановок()», который находится в кадре 27 и так далее при воспроизведении всей анимации кликов.

27- (better_mc.currentFrame-10)

Попробуйте простое решение, добавив 'стоп()' до вашего щелчка анимации начинается т.е. кадр 31 в этом случае.

Посмотрите, подходит ли эта проблема.

+0

О, боже мой, я не могу поверить, что решение было таким простым !!! Я просто проверил это как 20 раз, чтобы убедиться, что я не получал анимацию клика, когда я добавил stop(); один кадр перед меткой клика и теперь он работает. Спасибо, куча за скачивание моей fla и выяснение этой проблемы для меня. PS Я бы дал вам репутацию, но это только позволяет мне, если у меня есть 15: [ – user2365808

+0

Не проблема! Рад был помочь! :) – pravid

0

Невозможно открыть свой FLA, как у меня CS5 поэтому не так много помощи по этим

Не знаю, почему вам нужно оба нажмите и MouseDown событий, код кажется отлично отдельно от gotoAndPlay (Метка_строки) части, так как не знаю, как будут добавлены анимации здесь

Только для последней части вашего запроса

(кроме того, better_mc.Hit. _visible = false; doesn ' т работать, кажется)

Для AS3, свойство 'видимым' используется и не '_visible' так будет,

better_mc.Hit.**visible** = false; 
+0

Несчастная, что вспышка не имеет обратной совместимости, но здесь тот же FLA просто сохранить в виде файла документа CS5: https://dl.dropboxusercontent.com/u/18672917/Main_Btn_7halp6_CS5.fla Я пытался работать с другим человеком, почему это происходит в течение всего дня и до сих пор не было решения. FPS поднимается выше или удаляет и заменяет инструкцию «Out» на ActionScript и вставляется только что gotoAndPlay заставил проблему «исчезнуть», но, очевидно, я хотел сохранить «умный rollover/rollout». – user2365808