0

私はドラッグ パズル ゲームを作成しています。正確には 2 つの問題を解決する必要があります。

a) dragArray変数のすべてのオブジェクトがmatchArrayのオブジェクトと同じ場所にあるかどうかを確認します。b) その場合は、ボタンを表示してサウンド ファイルを再生します。(ボタンは*play_btn*で、クリックするとサウンドファイルが再生されますが、いわばパズルが解けたときにサウンドを再生する必要もあります。)

視覚的な補助を追加しますが、フォーラムでは評判が必要だと言っています.

何らかの支援をお待ちしております。ゲームはこのチュートリアルに基づいています。

var dragArray:Array = [p1, p2, p3, p4, p5, p6, p7, p8, p9];
var matchArray:Array = [p1_n, p2_n, p3_n, p4_n, p5_n, p6_n, p7_n, p8_n, p9_n];

var currentClip:MovieClip;
var startX:Number;
var startY:Number;

for(var i:int = 0; i < dragArray.length; i++) {
    dragArray[i].buttonMode = true;
    dragArray[i].addEventListener(MouseEvent.MOUSE_DOWN, item_onMouseDown);
    matchArray[i].alpha = 0.2;
}

function item_onMouseDown(event:MouseEvent):void {
    currentClip = MovieClip(event.currentTarget);
    startX = currentClip.x;
    startY = currentClip.y;
    addChild(currentClip); //bring to the front
    currentClip.startDrag();
    stage.addEventListener(MouseEvent.MOUSE_UP, stage_onMouseUp);
}

function stage_onMouseUp(event:MouseEvent):void {
    stage.removeEventListener(MouseEvent.MOUSE_UP, stage_onMouseUp);
    currentClip.stopDrag();
    var index:int = dragArray.indexOf(currentClip);
    var matchClip:MovieClip = MovieClip(matchArray[index]);
    if(currentClip.hitTestObject(matchClip)) {
       //a match was made! position the clip on the matching clip:
       currentClip.x = matchClip.x;
       currentClip.y = matchClip.y;
       //make it not draggable anymore:
        currentClip.removeEventListener(MouseEvent.MOUSE_DOWN, item_onMouseDown);
        currentClip.buttonMode = false;
    } else {
        //match was not made, so send the clip back where it started:
        currentClip.x = startX;
        currentClip.y = startY;
    }
}

var my_sound:Sound = new Sound();
my_sound.load(new URLRequest("sounds/song.mp3"));
var my_channel:SoundChannel = new SoundChannel();

play_btn.addEventListener(MouseEvent.CLICK, playSound);

function playSound(event:MouseEvent):void{
my_channel = my_sound.play();
}
4

1 に答える 1

0

このような検証関数を使用できます。すべてのドロップ アイテムがターゲット上にある場合は true、そうでない場合は false を返します。

function validate(drags:Array, drops:Array):Boolean {
  var found:uint = 0    
  for (var i:uint = 0;i<drags.length;i++ ) {
    var drag:MovieClip = MovieClip(drags[i]);
    var drop:MovieClip =  MovieClip(drops[i]);
    found += (drag.hitTestObject(drop)) ? 1 : 0
   }

  return found == drop.length    
}

次に、それを使用してグローバルな相互作用を確認できます。

var result:Boolean = validate(dragArray,matchArray);
if (result) {
  // all ok
  // play sound...
} else {
  // errors
}
于 2013-04-24T22:12:18.023 に答える