2011-06-04 74 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