jasin
jasin

Reputation: 1

AS3 using arrow keys to highlight movieclips

I have an array with movieclips that I place on the stage. I want to use the keyboard arrow keys to change alpha of each movieclip separately, as if you are navigating trough them ( I hope this makes sence). So far I can only highlight them all at once using the UP/DOWN arrow.My goal is to loop trough them with highlight and downlight using alpha property.

This is my code:

import flash.events.KeyboardEvent; import flash.events.Event;

var num1: Number = 262; var aantal: Number = 8;

function Main() {

    var BTN_arr: Array = new Array();
    var houder: Number = 1;
    var aantal2: uint = BTN_arr.length;
    var nextBTN: uint;
    var currentBTN: uint;


    for (var i = 0; i < aantal; i++) {
        var myBTN: BTNBg = new BTNBg();
        myBTN.name = "btn" + i;
        BTN_arr.push(myBTN);
        addChild(myBTN);
        myBTN.alpha = .45;
        myBTN.x = 40;
        myBTN.y = num1;
        num1 += 90;
    }

    BTN_arr[0].alpha = 1;


    stage.addEventListener(KeyboardEvent.KEY_DOWN, myKeyDown);


    function myKeyDown(e: KeyboardEvent): void {

        if (e.keyCode == Keyboard.DOWN) {

            for (var i = 0; i < BTN_arr.length; i++) {
                BTN_arr[i].alpha = 1;

            }

        }



        trace("down");


        if (e.keyCode == Keyboard.UP) {

            for (var j = 0; j < BTN_arr.length; j++) {
                BTN_arr[j].alpha = .45;
            }

            trace("up");
            //MyBTN.alpha = 1;


        }
    }
}

Main();

Upvotes: 0

Views: 106

Answers (2)

akmozo
akmozo

Reputation: 9839

To do what you want, you don't need to use a for loop every time to set buttons alphas, so you can use a var to set the current button and you set alpha just to it, like this :

var current_button:int = 0;
var sens:int = 0; // -1 : up, 1 : down

stage.addEventListener(Event.ENTER_FRAME, _onEnterFrame)
function _onEnterFrame(e:Event):void {  
    if(sens != 0){

        BTN_arr[current_button].alpha = .45;

        if(0 <= current_button + sens && current_button + sens < BTN_arr.length) current_button += sens;

        // if you want to pass from the last button to the first one and vice versa, you can enable these 3 lines and disable the 1st if
        //current_button += sens;
        //if(current_button < 0) current_button = BTN_arr.length - 1;
        //else if(current_button >= BTN_arr.length) current_button = 0;

        BTN_arr[current_button].alpha = 1;

        sens = 0;
    }
}

stage.addEventListener(KeyboardEvent.KEY_DOWN, _onKeyDown);
function _onKeyDown(e: KeyboardEvent): void {
    if (e.keyCode == Keyboard.DOWN) {
        sens = 1;
    } else if (e.keyCode == Keyboard.UP) {
        sens = -1;
    }
}

Which will give you something like this, and like this for the 2nd case (with 3 commented lines enabled).

Hope that can help.

Upvotes: 0

Gabe
Gabe

Reputation: 971

var position:int = 0;

function updateHighlight() : void{
     BTN_arr[position].alpha = 1; //highlight new one
}

function myKeyDown(e: KeyboardEvent): void {

    if (e.keyCode == Keyboard.DOWN) {
        trace("down");
        if(position > 0){
            BTN_arr[position].alpha = .45; //unhighlight current
            position--;
            updateHighlight();
        }
    }

    if (e.keyCode == Keyboard.UP) {
        trace("up");
        if(position < BTN_arr.length - 1){ //is not the last one
            BTN_arr[position].alpha = .45; //unhighlight current
            position++;
            updateHighlight();
        }
    }
}

Upvotes: 0

Related Questions