2013-07-23 49 views
0

我在舞臺上有25個影片剪輯,並且它們都可以單擊並着色。我想要一個名爲text_mc的影片剪輯變得可見,如果只有5個特定的按鈕被點擊並着色 - 不會更多。如果用戶選擇多於五個影片剪輯(甚至認爲包含5個影片剪輯),則名爲text_mc的影片剪輯應保持不可見狀態。我不能做最後一部分:如果單擊超過5個特定的影片剪輯,那麼text_mc應該保持不可見狀態。你能幫我麼?這是我的代碼如何在僅點擊五個影片剪輯(不多於)的情況下使影片剪輯可見

stop(); 

    import flash.display.MovieClip; 



var sximata:MovieClip = square1; 
import flash.display.MovieClip; 
import flash.events.MouseEvent; 
import flash.geom.ColorTransform; 



text_mc.visible=false; 


    square1.addEventListener(MouseEvent.CLICK, onsquare1); 
    function onsquare1(e:MouseEvent):void { 
sximata = square1; 
    } 


    square2.addEventListener(MouseEvent.CLICK, onsquare2); 
    function onsquare2(e:MouseEvent):void { 
sximata = square2; 
    } 

    square3.addEventListener(MouseEvent.CLICK, onsquare3); 
    function onsquare3(e:MouseEvent):void { 
sximata = square3; 
    } 


    square4.addEventListener(MouseEvent.CLICK, onsquare4); 
    function onsquare4(e:MouseEvent):void { 
sximata = square4; 
    } 


    square5.addEventListener(MouseEvent.CLICK, onsquare5); 
    function onsquare5(e:MouseEvent):void { 
sximata = square5; 
    } 

    square6.addEventListener(MouseEvent.CLICK, onsquare6); 
    function onsquare6(e:MouseEvent):void { 
sximata = square6; 
     } 

    square7.addEventListener(MouseEvent.CLICK, onsquare7); 
    function onsquare7(e:MouseEvent):void { 
sximata = square7; 
    } 


    square8.addEventListener(MouseEvent.CLICK, onsquare8); 
    function onsquare8(e:MouseEvent):void { 
sximata = square8; 
square8Clicked = true; 
checkButtons(); 


    } 

    square9.addEventListener(MouseEvent.CLICK, onsquare9); 
    function onsquare9(e:MouseEvent):void { 
sximata = square9; 
square9Clicked = true; 
checkButtons(); 
    } 


    square10.addEventListener(MouseEvent.CLICK, onsquare10); 
    function onsquare10(e:MouseEvent):void { 
sximata = square10; 
square10Clicked = true; 
checkButtons(); 
    } 


    square11.addEventListener(MouseEvent.CLICK, onsquare11); 
    function onsquare11(e:MouseEvent):void { 
sximata = square11; 
    } 


     square12.addEventListener(MouseEvent.CLICK, onsquare12); 
     function onsquare12(e:MouseEvent):void { 
sximata = square12; 
    } 

    square13.addEventListener(MouseEvent.CLICK, onsquare13); 
     function onsquare13(e:MouseEvent):void { 
sximata = square13; 
square13Clicked = true; 
checkButtons(); 
    } 


    square14.addEventListener(MouseEvent.CLICK, onsquare14); 
    function onsquare14(e:MouseEvent):void { 
sximata = square14; 
square14Clicked = true; 
checkButtons(); 
    } 


    square15.addEventListener(MouseEvent.CLICK, onsquare15); 
    function onsquare15(e:MouseEvent):void { 
sximata = square15; 
    } 

    square16.addEventListener(MouseEvent.CLICK, onsquare16); 
    function onsquare16(e:MouseEvent):void { 
sximata = square16; 
    } 

    square17.addEventListener(MouseEvent.CLICK, onsquare17); 
    function onsquare17(e:MouseEvent):void { 
sximata = square17; 
    } 


    square18.addEventListener(MouseEvent.CLICK, onsquare18); 
    function onsquare18(e:MouseEvent):void { 
sximata = square18; 
     } 

    square19.addEventListener(MouseEvent.CLICK, onsquare19); 
    function onsquare19(e:MouseEvent):void { 
sximata = square19; 
    } 


    square20.addEventListener(MouseEvent.CLICK, onsquare20); 
    function onsquare20(e:MouseEvent):void { 
sximata = square20; 
     } 


    square21.addEventListener(MouseEvent.CLICK, onsquare21); 
    function onsquare21(e:MouseEvent):void { 
sximata = square21; 
     } 


    square22.addEventListener(MouseEvent.CLICK, onsquare22); 
    function onsquare22(e:MouseEvent):void { 
sximata = square22; 
     } 

    square23.addEventListener(MouseEvent.CLICK, onsquare23); 
    function onsquare23(e:MouseEvent):void { 
sximata = square23; 
     } 


    square24.addEventListener(MouseEvent.CLICK, onsquare24); 
    function onsquare24(e:MouseEvent):void { 
sximata = square24; 
     } 


    square25.addEventListener(MouseEvent.CLICK, onsquare25); 
     function onsquare25(e:MouseEvent):void { 
sximata = square25; 
     } 




    var myColorTransform:ColorTransform=transform.colorTransform; 
    red_btn.addEventListener(MouseEvent.CLICK, changeColour); 
    function changeColour(event:MouseEvent):void { 


    myColorTransform.color=0xBD8D46; 

    sximata.transform.colorTransform=myColorTransform; 


    } 


    resetButton.addEventListener(MouseEvent.CLICK, fl_MouseClickHandler); 

    function fl_MouseClickHandler(event:MouseEvent):void 
    { 
    gotoAndPlay(1); 
     } 




    var square8Clicked:Boolean = false; 
    var square9Clicked:Boolean = false; 
    var square10Clicked:Boolean = false; 
    var square13Clicked:Boolean = false; 
    var square14Clicked:Boolean = false; 


    function checkButtons():void 
{ 
if(square8Clicked && square9Clicked && square10Clicked && square13Clicked && square14Clicked) 
    { 
    text_mc.visible = true; 

    } 
} 

回答

0

你可以一個布爾變量添加到每個如有其他方塊被點擊,輪流到真正的其他功能。例如:

var isClicked:Boolean = false; 
square1.addEventListener(MouseEvent.CLICK, onsquare1); 
function onsquare1(e:MouseEvent):void { 
    sximata = square1; 
    isClicked = true; 
} 

,然後在複選按鈕的功能,請檢查「isClicked」仍然是錯誤的:

function checkButtons():void 
{ 
    if(!isClicked && square8Clicked && square9Clicked && square10Clicked && square13Clicked && square14Clicked) 
    { 
     text_mc.visible = true; 

    } 
} 
+0

非常感謝。我現在就這樣做了。你的幫助非常有幫助。 – Marianna

0

我的解決辦法如下。它基於計算用戶可點擊的每種類型的MovieClip所接收的點擊次數。代碼的相關部分將在onClick()checkClickCounts()方法中。

首先,您會看到,在buildMCs()方法中,我只需創建一堆MovieClip並將它們放置在網格的舞臺上。我已經這樣做了,以便您提到的「特定」MC是網格中每行的第一項。對於這些「特定」MC中的每一個,我添加了一個屬性:isSpecial:Boolean並將其設置爲true。之後,當單擊MC時,OnClick()方法將檢查MC是否特殊,並將增加相關的點擊計數屬性。然後,調用checkClickCounts()。如果有5次良好的點擊次數和0次糟糕的點擊次數,那麼我們會讓用戶知道。這是你顯示你的文本字段的地方。 (在我的情況下,我只是在屏幕上畫一個大的紅色矩形

我在這裏演示的另一個建議是避免重複你的鼠標點擊代碼如果你在構造函數中看,你會看到我用這條線:

this.addEventListener(MouseEvent.CLICK, onClick); 

這告訴主舞臺精靈聽所有的鼠標點擊,即使是發生在它裏面的影片剪輯的那些在onClick()方法我檢查,看看是否單擊的項目 - 該事件的目標 - 是一個MovieClip,如果是,那麼我會進行額外的檢查,看看被點擊的MC是否是我想要的。通過這樣做,我可以編寫一次處理鼠標點擊的代碼,現在如果我需要改變一些東西,我只有h大約一次,而不是25次。節省我的時間,但也使得代碼更容易出錯,因爲如果需要做出更改,我不太可能錯過任何東西。

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

public class Clicky extends Sprite 
{ 
    public function Clicky() 
    { 
     this.buildMCs(); 

     this.addEventListener(MouseEvent.CLICK, onClick); 
    } 

    private function buildMCs():void 
    { 
     var rows:int = 5; 
     var cols:int = 5; 

     var boxSize:int = 10; 

     for (var r:int = 0; r < rows; r++) 
     { 
      for (var c:int = 0; c < cols; c++) 
      { 
       var newMC:MovieClip = new MovieClip(); 
       newMC.graphics.lineStyle(0, 0x00ff00); 

       // want to mark the "specific" movieclips 
       if (c == 0) 
       { 
        newMC.graphics.beginFill(0x0000ff); 

        // just something that makes this MC unique... ideally 
        // this would be not a MovieClip, but a class that defines 
        // actual properties worth checking for 
        newMC.isSpecial = true; 
       } 
       else 
       { 
        newMC.graphics.beginFill(0x00ff00); 
       } 
       newMC.graphics.drawRect(0, 0, boxSize, boxSize); 

       this.addChild(newMC); 

       newMC.x = (c * boxSize); 
       newMC.y = (r * boxSize); 
      } 
     } 
    } 

    private function onClick (e:MouseEvent):void 
    { 
     if (e.target is MovieClip) 
     { 
      var mc:MovieClip = e.target as MovieClip; 
      mc.alpha = .25; 

      // disable the clicking for the clicked item 
      mc.mouseEnabled = false; 

      if (mc.isSpecial) 
      { 
       _specialClicks++; 
      } 
      else 
      { 
       _badClicks++; 
      } 

      this.checkClickCounts(); 
     } 
    } 

    private var _specialClicks:int = 0; 
    private var _badClicks:int = 0; 
    private function checkClickCounts():void 
    { 
     if (_specialClicks == 5 && _badClicks == 0) 
     { 
      // do your thing - show the text_mc, play a sound, award a prize, etc. 
      this.graphics.beginFill(0xff0000); 
      this.graphics.drawRect(0, 0, 1000, 1000); 
     } 
    } 
} 
}