2011-06-04 95 views
0

你好 我正在創建一個棋盤,你可以移動棋子。目前,我正在努力工作,編碼如下。我知道這不是優雅,也許是最無效的代碼,但這是我的動作3.0生活的第2天,我有點兒是初學者。無論如何,事情是這樣的,當你點擊一塊代碼時,下面的代碼會找出可能的方法。然後在那些地方出現綠色正方形。然後你可以按下那些綠色方塊,然後這個白嘴鴉會移動到那裏。國際象棋棋盤界面。無法移除孩子。有什麼建議麼?

好的,現在來解決這個問題。廣場不會消失。我想讓他們全部被刪除,當我點擊他們中的一個,車子就會移到那裏。

我已經嘗試過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"}); 
} 

回答

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(); 
} 
+0

謝謝。 我會檢查它是否有效。 – 2011-06-04 18:06:44

+0

謝謝! 它完美的作品! 你的幫助是非常感謝:)。 – 2011-06-04 18:15:33

+0

@ user784079那麼你應該接受這個作爲你的問題的答案。 – Taurayi 2011-06-04 19:06:37

0

你可以把臨時亮點單獨雪碧。然後你的棋盤將如下所示:
階段兒童:底板,高光,棋子,按順序。
當你需要刪除亮點時,你可以用numChildrengetChildAt來重複亮點的子項,並且每個子項都調用removeChild,你甚至不需要爲它們設置一個特殊的列表。

+0

Thanks.I只是想知道一件事(可能是你的基本的答案),你怎麼把在精靈臨時亮點? – 2011-06-04 17:55:05

+0

使用addChild,因爲Sprite是DisplayObjectContainer。 – alxx 2011-06-04 18:28:38

+0

我更喜歡用層分割場景,因爲這簡化了問題背後的原因。如果您先添加舞臺(或父級容器)板,然後突出顯示容器,然後再放置容器,則始終可以在板和板下獲得亮點。 – alxx 2011-06-04 18:36:52