【问题标题】:AS3 using arrow keys to highlight movieclipsAS3 使用箭头键突出显示影片剪辑
【发布时间】:2015-02-15 18:40:57
【问题描述】:

我有一个放置在舞台上的包含电影剪辑的数组。我想使用键盘箭头键分别更改每个影片剪辑的 alpha,就好像您正在浏览它们一样(我希望这有意义)。 到目前为止,我只能使用向上/向下箭头一次性突出显示它们。我的目标是使用 alpha 属性通过突出显示和筒灯循环遍历它们。

这是我的代码:

导入 flash.events.KeyboardEvent; 导入 flash.events.Event;

var num1: 数字 = 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();

【问题讨论】:

    标签: actionscript-3


    【解决方案1】:
    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();
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      要做你想做的事,你不需要每次都使用for循环来设置按钮的alphas,所以你可以使用一个var来设置当前的按钮,你只为它设置alpha,像这样:

      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;
          }
      }
      

      这会给你类似this的东西,而对于第二种情况,就像this一样(启用3条注释行)。

      希望能有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-24
        • 2012-06-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多