2014-01-09 3 views
0

Я не знаю, представляет ли вопрос именно то, что я хочу задать, но я не мог бы определить, как еще назвать то, что я хочу сделать.Как создать иерархию Меню/Значок

Так что я пытаюсь создать сетку 3x3 и в каждой ячейке у меня есть изображение. Я могу щелкнуть по любой из 2-й ячейки столбца, только если 1-й из того же столбца был нажат до этого. Что я имею в виду:

Я могу щелкнуть по ячейке №: 5, только если 4 щелкнули до этого не

я могу нажать клетку No: 9, только если 8 и 7 была нажата до этого

я не могу нажать камере №: 1,4,7 в любое время.

, а также, когда они щелкают их альфа получает до 0,1 (так что я знаю, что клетка была нажата.)

enter image description here

В настоящее время я логика для создания сетки и изменения альфа любого объект, который я нажимаю, но у меня нет логики для иерархии.

public function Main() 
    { 

     var index:int = 0 
     var col:int = 3 
     var row:int = 3 
     for (var i:int = 0; i < row; i++) 
     { 
      for (var j:int = 0; j < col; j++) 
      { 
       var cls:Class = Class(getDefinitionByName("Bitmap" + (index + 1))); 

       myImage = new Bitmap(new cls()); 
       var myImage_mc:MovieClip = new MovieClip(); 
       myImage_mc.addChild(myImage) 
       myImage_mc.x = 100 + i * (myImage_mc.width + 10) 
       myImage_mc.y = 100 + j * (myImage_mc.height + 10) 
       this.addChild(myImage_mc); 
       myImage_mc.mouseEnabled = true 
       myImage_mc.addEventListener(MouseEvent.CLICK, onClick); 

       index++ 
      } 
     } 
    } 

    private function onClick(ev:MouseEvent):void 
    { 
     trace(ev.target.name) 
     ev.currentTarget.alpha = 0.1; 
    } 

ответ

1

Другой способ заключается в использовании переменной ссылка на элемент ссылки.

public class BitmapButton extends Sprite { 
    public var next:BitmapButton = null; 
} 

public class Main extends Sprite { 
    public function Main():void 
    { 
     if (stage) init(); 
     else addEventListener(Event.ADDED_TO_STAGE, init); 
    } 


    private function init(e:Event = null):void 
    { 
     removeEventListener(Event.ADDED_TO_STAGE, init); 

     var index:int = 0 
     var col:int = 3 
     var row:int = 3 

     for (var j:int = 0; j < col; j++) 
     { 
      var lastRowElement:BitmapButton = null; 

      for (var i:int = 0; i < row; i++) 
      { 
       var bmpd:BitmapData = new BitmapData(100, 100, false, Math.floor(0xff + Math.random() * 0xffffff)); 

       var myImage:Bitmap = new Bitmap(bmpd); 
       var myImage_mc:BitmapButton = new BitmapButton(); 

       myImage_mc.addChild(myImage) 
       myImage_mc.x = 100 + j * (myImage_mc.width + 10); 
       myImage_mc.y = 100 + i * (myImage_mc.height + 10); 

       myImage_mc.name = i + "_" + j; 

       this.addChild(myImage_mc); 

       myImage_mc.mouseChildren = false; 
       myImage_mc.mouseEnabled = false; 

       myImage_mc.addEventListener(MouseEvent.CLICK, onClick); 

       if (lastRowElement == null) { 

        myImage_mc.mouseEnabled = true; 

       } else { 
        lastRowElement.next = myImage_mc; 
       } 

       lastRowElement = myImage_mc; 

       index++ 
      } 
     } 

    } 


    private function onClick(ev:MouseEvent):void 
    { 
     trace(ev.target.name) 


     if (ev.target is BitmapButton) { 
      var btn:BitmapButton = ev.target as BitmapButton; 

      ev.currentTarget.alpha = 0.1; 

      if(btn.next != null) { 
       btn.next.mouseEnabled = true; 
      } 
     } 
    } 

} 
+0

хорошо каждый примерный пример использует класс словаря. Я должен видеть, что это так здорово – GregorII

1

Что-то вроде этого

package 
{ 
    import flash.display.MovieClip; 
    import flash.display.Sprite; 
    import flash.events.MouseEvent; 
    import flash.utils.Dictionary; 

    public class Grid extends Sprite 
    { 
     private var _box : Dictionary = new Dictionary; 
     private var _conditions : Dictionary = new Dictionary; 
     private var _clicked : Dictionary = new Dictionary; 

     public function Grid() 
     { 
      var index:int = 0 
      var col:int = 3 
      var row:int = 3 
      for (var i:int = 0; i < row; i++) 
      { 
       for (var j:int = 0; j < col; j++) 
       { 
        //var cls:Class = Class(getDefinitionByName("Bitmap" + (index + 1))); 

        //myImage = new Bitmap(new cls()); 
        var myImage_mc:MovieClip = new MovieClip(); 
        //myImage_mc.addChild(myImage) 

        _box[ index ] = myImage_mc; 

        // Conditions for the 2nd and 3nd line etc. 
        if(i != 0) 
         _conditions[ myImage_mc ] = _box[ index - col ]; 

        // ------ DEBUG 
        myImage_mc.graphics.beginFill(0xFFFFFF * Math.random()); 
        myImage_mc.graphics.drawRect(0,0,100,100); 
        myImage_mc.graphics.endFill(); 
        // ------ END DEBUG 

        // Note i/j are invert from your example 
        myImage_mc.x = 100 + j * (myImage_mc.width + 10); 
        myImage_mc.y = 100 + i * (myImage_mc.height + 10); 
        this.addChild(myImage_mc); 
        myImage_mc.mouseEnabled = true 
        myImage_mc.addEventListener(MouseEvent.CLICK, onClick); 

        index++ 
       } 
      } 
     } 

     protected function onClick(ev:MouseEvent):void 
     { 
      var neededClickElement : MovieClip = _conditions[ ev.currentTarget ]; 

      // Check if we need an active movieclip before 
      if(neededClickElement != null && ! _clicked[ neededClickElement ]) 
       return; 

      _clicked[ ev.currentTarget ] = true; 
      ev.currentTarget.alpha = 0.1; 
     } 
    } 
} 
Смежные вопросы