-1

ボタンを特定の順序でクリックすると、3つのボタンをフレームに移動できるようにするのに苦労しています。たとえば、ボタンには
ボタン1 、
ボタン2 、
ボタン3 のラベルが付いています。

クリックする必要がある順序は、ボタン3、ボタン1、ボタン2で、次のフレームに移動します。これを実現するにはどうすればよいですか。

これは私がこれまでに持っているものです。

 var clicked = MouseEvent.CLICK 
 var buttons = new Array(YellowButton, BlueButton, RedButton); 
 for (var a=0; a<buttons.lenght; a++) 
 { 
   buttons[a].buttonMode=true 
   buttons[a].addEventListener(clicked,RedYellowBlue); 
 } 

 function RedYellowBlue(event:MouseEvent):void { gotoAndStop(20); }

よろしくお願いします

4

3 に答える 3

0

私がお勧めするのは、ボタンをクリックして組み立てられ、設定した特定のシーケンスと比較される文字列オブジェクトを作成することです。これの利点は、任意の長さのシーケンスで機能させることができることです。

ここで最大のことは、3つのボタンすべてに同じイベントリスナーが必要ないことです。それらのアクションを一意にする必要があります。そうでない場合、1つをクリックすることは、他のすべてをクリックすることと同じです(これが現在のコードの問題です)。

var checkString:String = "";

//Create event listeners and their functions.
YellowButton.addEventListener(Mouse.CLICK, yellowClick);
RedButton.addEventListener(Mouse.CLICK, redClick);
BlueButton.addEventListener(Mouse.CLICK, blueClick);

function yellowClick(evt:Event):void
{
   //In each event listener function, add a letter or 
   //string to the checkString variable.
   checkString += "y";

   //Then, see if the string matches or not.
   check();
}

function redClick(evt:Event):void
{
   checkString += "r";
   check();
}

function blueClick(evt:Event):void
{
   checkString += "b";
   check();
}

//If the proper sequence is red, yellow, blue, the string would read "ryb".
function check():void
{
   if(checkString == "ryb")
   {
      //Clear the checkString for convenience before going on.
      clearString();
      //CODE TO GO TO NEW FRAME
      gotoAndStop(20);
   }
   else
   {
      //Make sure the string is at least 3 characters long.
      if(checkString.length >= 3)
      {
         clearString();
         gotoAndStop(foo);
      }
   }
}

function clearString():void
{
   //You will want to have a function for clearing the string.
   //This is especially useful if you have a button for "start over."
   checkString = "";
}

それはあなたが始めるのに十分なはずです。さらにサポートが必要な場合は、私の回答にコメントしてください。

于 2012-10-31T16:25:24.827 に答える
0

@ JasonMc92の回答を統合するには、ターゲットの名前をcheckString文字として使用できるため、すべてのボタンに対して1つの関数を呼び出すだけで済みます。

yellowButton.addEventListener(MouseEvent.CLICK, redYellowBlue);
redButton.addEventListener(MouseEvent.CLICK, redYellowBlue);
blueButton.addEventListener(MouseEvent.CLICK, redYellowBlue);

function redYellowBlue(e:MouseEvent){
  checkString += e.currentTarget.name.substr(0,1);
  check();
}
//... continue on with Jason's functions

または、配列で設定したので、チェックシーケンスとしてボタンのインデックスを使用することもできます。何かのようなもの:

function redYellowBlue(e:MouseEvent){
  checkString += String(buttons.indexOf(e.currentTarget));
  check();
}

function check(){
  if (checkString == '201') {
    // ... handle correct sequence
  }
}

また、ベストプラクティスのヒント:

クラスの名前には先頭の大文字のみを使用してください。インスタンス名と関数名は小文字で始める必要があります。(先頭のキャップは何も壊しませんが、それは標準的な方法です)

于 2012-10-31T16:44:20.273 に答える
0

//ここにコードがあります

var buttons:Array = new Array(YellowButton, BlueButton, RedButton);



for(var i:int=0;i< buttons.length;i++) 
{
  buttons[a].buttonMode=true 
  buttons[a].addEventListener(MouseEvent.CLICK,buttonsClickHandler); 
} 

function buttonsClickHandler(event:MouseEvent):void { 

    var button:MovieClip = MovieClip(event.target);

    switch(button.name)
    {
        case "YellowButton":
        case "BlueButton":
        gotoAndStop(2);
        break;
        case "RedButton":
        gotoAndStop(3);
        break;
    }
}
于 2012-10-31T17:25:23.743 に答える