2011-02-10 3 views
0

У меня есть 7 кнопок на моей сцене (buttonA, buttonB и т. Д.) Всех MC. Я хотел бы управлять RollOver, RollOut & CLick with AS3.AS3 Button States

Сначала я думал, что я мог бы просто сказать моей кнопку Слушатель, куда идти

т.е. gotoAndStop (2), который является RollOver состояние. или gotoAndStop (3), который находится в состоянии Click. и gotoAndStop (1), который является статусом RollOut.

Но когда я «Щелкнуть», а затем сверните, мне нужна кнопка, чтобы оставаться «нажатой», пока не будет нажата какая-либо другая кнопка.

не может показаться, чтобы понять это. Любая помощь будет оценена по достоинству.

ответ

0

Хм ...

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

[это быстро написал код, но вы получите идею]

Кажется, вам нужно иметь некоторый родительский «Сброс» и индивидуальные клик обработчики для каждой кнопки.

buttonA.addEventListener(MouseEvent.MOUSE_DOWN, buttonADown); 


function resetButtons(){ 
    buttonA.gotoAndStop(1); 
    buttonB.gotoAndStop(1); 
    buttonC.gotoAndStop(1); 
    buttonD.gotoAndStop(1); 
    buttonE.gotoAndStop(1); 
    buttonF.gotoAndStop(1); 
    buttonG.gotoAndStop(1); 
} 

function buttonADown(e.Mouse_Event):void{ 

    resetButtons(); //RESET ALL PREVIOUSLY CLICKED BUTTONS 
    buttonA.gotoAndStop(2); 
} 

// and so on down the line.... 
1

было бы быстрее и эффективнее, если вы назовете свои кнопки численно. button1, button2, button2 .. это позволит вам писать для петель для выполнения функций легко

// loop through the buttons and give them mouse click listeners 
for (var i:int = 1 ; i <= 7; i++){ 
    var curButton:MovieClip = getChildByName ("button"+i); 
    // set click lisitener 
    curButton.addEventListener (MouseEvent.CLICK, buttonClickHandler); 
    // set rollover listener 
    curButton.addEventListener (MouseEvent.ROLLOVER, buttonRollOverHandler); 
    // set rollout listener 
    curButton.addEventListener (MouseEvent.ROLLOUT, buttonRollOutHandler); 

    // set initial state 
    curButton.gotoAndStop(1); 
} 

function resetStates(){ 
    for (var i = 1; i<=7; i++){ 
     var curButton = getChildByName("button"+i); 
     curButton.gotoAndStop(1); 
    } 
} 

function buttonRollOverHandler (evt:MouseEvent){ 
    resetStates(); 
    evt.target.gotoAndStop(2); 
} 
function buttonRollOutHandler (evt:MouseEvent){ 
    resetStates(); 
} 
function buttonClickHandler (evt:MouseEvent){ 
    resetStates(); 
    evt.target.gotoAndStop(3); 
} 
+1

+1, хотя я бы, вероятно, первоначально разместить кнопки в массиве, а не полагаться на использование getChildByName. – Allan

+0

@Allan @guacamoly Я понял, с 1-й частью, с вашей помощью, СПАСИБО! Теперь мне нужно запустить всю анимацию, пока пользователь не взаимодействует с ней. Поэтому, другими словами, мне нужно симулировать нажатие кнопок по порядку (сначала до последнего), пока пользователь не начнет взаимодействовать со слайд-шоу. – erica

+0

вы можете сделать это с помощью метода setInterval. setInterval позволяет вам вызывать функцию через определенный промежуток времени. просмотрите его в документации. Каждый раз, когда функция получает вызов, переключает состояние следующей кнопки и перезагружает остальные. Чтобы остановить анимацию, когда пользователь навешивает на любую кнопку, используйте clearInterval в buttonRollOverHandler. И чтобы он перезапустил setInterval с той же функцией анимации внутри buttonRollOutHandler – guacamoly