0

こんにちは、駒を動かせるチェス盤を作成中です。現在、私はルークに取り組んでおり、コーディングは以下のとおりです。私はそれがエレガントではなく、おそらく最も非効率的なコードであることを知っていますが、これは私のアクションスクリプト 3.0 ライフの 2 日目であり、私はちょっと初心者です。とにかく、問題は、ピースをクリックすると、以下のコードが可能な方法を見つけ出すということです。次に、それらの場所に緑色の四角が表示されます。次に、それらの緑色の四角を押すと、ルークがそこに移動します。

さて、問題に移ります。四角は消えません。それらの1つをクリックすると、それらがすべて削除され、ルークがそこに移動します。

removeChild() を試してみましたが、それは別の関数で発生するため、機能しません。そのため、コードを調べて解決策を提案していただけると、とても助かります。

よろしくエミール

https://picasaweb.google.com/109156245246626370734/Jun42011?authkey=Gv1sRgCMy4v_b01aikzAE&feat=directlink

import flash.display.Sprite
import flash.events.MouseEvent
import flash.text.TextField;
import flash.geom.Point;
import caurina.transitions.*

myPoint.addEventListener(MouseEvent.MOUSE_DOWN, startMove);

function startMove(evt:MouseEvent) {

    var boxNum:int = Math.floor(myPoint.y/100)+1;
    for (var i:int = 1; i <boxNum; i++) {
        var box:Ball = new Ball();
        box.x = myPoint.x;
        box.y = myPoint.y - i * box.height;
        addChild(box);
        Tweener.addTween(box, {alpha:0.5});
                box.buttonMode = true;
                box.addEventListener(MouseEvent.ROLL_OVER, onOver,
                                     false, 0, true);
                box.addEventListener(MouseEvent.ROLL_OUT, onOut,
                                     false, 0, true);
                box.addEventListener(MouseEvent.MOUSE_DOWN, onclick);
        }
    var boxNum1:int = Math.floor((800-myPoint.y)/100)+1;
    for (var i:int = 1; i <boxNum1; i++) {
        var box1:Ball = new Ball();
        box1.x = myPoint.x;
        box1.y = myPoint.y + i * box.height;
        addChild(box1);
        Tweener.addTween(box1, {alpha:0.5});
                box1.buttonMode = true;

                box1.addEventListener(MouseEvent.ROLL_OVER, onOver,
                                     false, 0, true);
                box1.addEventListener(MouseEvent.ROLL_OUT, onOut,
                                     false, 0, true);
                box1.addEventListener(MouseEvent.CLICK, onclick);
    }
    var boxNum2:int = Math.floor(myPoint.x/100)+1;
    for (var i:int = 1; i <boxNum2; i++) {
        var box2:Ball = new Ball();
        box2.x = myPoint.x - i * box.height;
        box2.y = myPoint.y;

        addChild(box2);
        Tweener.addTween(box2, {alpha:0.5});
                box2.buttonMode = true;
                box2.addEventListener(MouseEvent.ROLL_OVER, onOver,
                                     false, 0, true);
                box2.addEventListener(MouseEvent.ROLL_OUT, onOut,
                                     false, 0, true);
                box2.addEventListener(MouseEvent.CLICK, onclick);
    }
    var boxNum3:int = Math.floor((800-myPoint.x)/100)+1;
    for (var i:int = 1; i <boxNum3; i++) {
        var box3:Ball = new Ball();
        box3.x = myPoint.x + i * box.height;
        box3.y = myPoint.y;
        addChild(box3);
        Tweener.addTween(box3, {alpha:0.5});
        box3.buttonMode = true;
        box3.addEventListener(MouseEvent.ROLL_OVER, onOver, false, 0, true);
        box3.addEventListener(MouseEvent.ROLL_OUT, onOut, false, 0, true);
        box3.addEventListener(MouseEvent.CLICK, onclick);
    }
}

function onOver(evt:Event):void {
    var box:MovieClip = MovieClip(evt.target);
    addChild(box)
    box.scaleX = box.scaleY = 1.1;
}

function onOut(evt:Event):void {
    evt.target.scaleX = evt.target.scaleY = 1;
}

function onclick(Event:MouseEvent):void {
    var xcod:int = Math.ceil(mouseX/100)*100-50;
    var ycod:int = Math.ceil(mouseY/100)*100-50;
    Tweener.addTween(myPoint, {x:xcod, y:ycod, time:1, transition:"linear"});
}
4

2 に答える 2

1

alxxの答えは正しいです、あなたはそれらのために特別なリストを保持する必要はないでしょう。配列を使用して参照を保存する別の方法は、次のようになります。

var boxes:Array = new Array();

function startMove(evt:MouseEvent):void {
   ...
   var box:Ball = new Ball();
   addChild(box);
   boxes.push(box);
   ...
   var box1:Ball = new Ball();
   addChild(box1);
   boxes.push(box1);
   ...
}

function onClick(evt:MouseEvent):void {
   for each (var box:Ball in boxes) {
      removeChild(box);
   }
   boxes = new Array();
}
于 2011-06-04T17:49:46.103 に答える
0

一時的なハイライトを別のスプライトに入れることができます。ステージの子: ベースボード
、ハイライト、ピース、この順序で。
ハイライトを削除する必要がある場合は、ハイライトの子をnumChildrenandで反復処理し、それぞれgetChildAtを呼び出すremoveChildことができます。それらの特別なリストは必要ありません。

于 2011-06-04T17:35:35.783 に答える