在Flash AS3中查找绘制对象的坐标

在Flash AS3中查找绘制对象的坐标,flash,actionscript-3,Flash,Actionscript 3,我正在用Flash制作一个棋盘游戏;作为全面掌握Flash AS3过程的一部分 我有一个原始板的JPEG。它包含约1000个圆圈,玩家可以在这些圆圈之间移动棋子。相当标准的棋盘游戏。这些圆的间隔不是规则的 到目前为止,我已经用Flash手工画出了这些圆圈,并将它们放置在需要的位置。这看起来很棒-我可以看到我所有的地方 我现在想做的是通过编程创建这些圆。我希望能够做到这一点,以便我可以调整空间的外观(取决于游戏状态)。最终,我希望能够缩放/平移整个游戏板 我的问题是,有没有一种方法可以用唯一的参考

我正在用Flash制作一个棋盘游戏;作为全面掌握Flash AS3过程的一部分

我有一个原始板的JPEG。它包含约1000个圆圈,玩家可以在这些圆圈之间移动棋子。相当标准的棋盘游戏。这些圆的间隔不是规则的

到目前为止,我已经用Flash手工画出了这些圆圈,并将它们放置在需要的位置。这看起来很棒-我可以看到我所有的地方

我现在想做的是通过编程创建这些圆。我希望能够做到这一点,以便我可以调整空间的外观(取决于游戏状态)。最终,我希望能够缩放/平移整个游戏板

我的问题是,有没有一种方法可以用唯一的参考标记每个圆圈,然后循环并记录位置?

我在想一些类似Javascript DOM“getElementsByTagName”或类似的东西

目前我只能看到两种选择:

  • 将每个圆转换为一个符号,并给它一个唯一的类名,以便我可以从代码中访问它
  • 检查并写下每个圆的X/Y(添加到我已有的电路板位置数据库中),以便我可以编程地绘制它们

  • 我对Flash还比较陌生,但我确实有技术背景。我的意思是,我不需要解释每一个基本细节;相反,我只需要有人给我指出正确的方向!谢谢

    您可以首先动态地放置圆,或者完全随机,然后让元素重叠,或者将它们放置在具有小随机偏移的网格中。可能有一个单独的fla,它将点击一次又一次地生成圆圈,直到你对配置满意为止,然后使用一个键吐出动作脚本代码。有点像一个又快又脏的关卡编辑器

    var circlesNum:int = 20;
    var circleRadius:Number = 10;
    var circles:Array;
    var row:int = 4;
    var col:int = 5;
    var space:int = 5;
    var randomOffset:int = 5;
    var randomShift:Number;
    
    function generateCircles(event:MouseEvent = null):void{
        circles = [];
        while(numChildren > 0) removeChildAt(0);
        for(var i:int = 0 ; i < circlesNum; i++){
            var circle:Shape = new Shape();
            circle.graphics.lineStyle(1);
            circle.graphics.drawCircle(0, 0, circleRadius);
            circle.name = 'circle'+i;
            randomShift = Math.random() * randomOffset - randomOffset * .5;
            circle.x = ((circleRadius * 2 +space) * (i % col)) + randomShift;
            circle.y = ((circleRadius * 2 +space) * (i % row)) + randomShift;
            circles.push(circle);
            addChild(circle);
        }
    }
    function generateCode(event:KeyboardEvent = null):void {
        var code:String = 'var circles:Array = [';
        for(var i:int = 0 ; i < circlesNum; i++){
            if(i < circlesNum-1) code += '{name: ' + circles[i].name + 'x: ' + circles[i].x + ',y: ' + circles[i].y + '},\n';
            else                 code += '{name: ' + circles[i].name + 'x: ' + circles[i].x + ',y: ' + circles[i].y + '}];';
        }
        trace(code);
    }
    
    stage.addEventListener(MouseEvent.MOUSE_DOWN, generateCircles);
    stage.addEventListener(KeyboardEvent.KEY_DOWN, generateCode);
    
    在输出面板中

    最简单的版本可能是使用jsfl,您可以只使用DrawingObject,不使用电影剪辑,只需移动它们,然后按下神奇的shorcut键。 更灵活的版本是迷你编辑器grid thingy


    HTH

    您可以首先动态放置圆,要么完全随机,元素重叠,要么将它们放置在具有小随机偏移的网格中。可能有一个单独的fla,它将点击一次又一次地生成圆圈,直到你对配置满意为止,然后使用一个键吐出动作脚本代码。有点像一个又快又脏的关卡编辑器

    var circlesNum:int = 20;
    var circleRadius:Number = 10;
    var circles:Array;
    var row:int = 4;
    var col:int = 5;
    var space:int = 5;
    var randomOffset:int = 5;
    var randomShift:Number;
    
    function generateCircles(event:MouseEvent = null):void{
        circles = [];
        while(numChildren > 0) removeChildAt(0);
        for(var i:int = 0 ; i < circlesNum; i++){
            var circle:Shape = new Shape();
            circle.graphics.lineStyle(1);
            circle.graphics.drawCircle(0, 0, circleRadius);
            circle.name = 'circle'+i;
            randomShift = Math.random() * randomOffset - randomOffset * .5;
            circle.x = ((circleRadius * 2 +space) * (i % col)) + randomShift;
            circle.y = ((circleRadius * 2 +space) * (i % row)) + randomShift;
            circles.push(circle);
            addChild(circle);
        }
    }
    function generateCode(event:KeyboardEvent = null):void {
        var code:String = 'var circles:Array = [';
        for(var i:int = 0 ; i < circlesNum; i++){
            if(i < circlesNum-1) code += '{name: ' + circles[i].name + 'x: ' + circles[i].x + ',y: ' + circles[i].y + '},\n';
            else                 code += '{name: ' + circles[i].name + 'x: ' + circles[i].x + ',y: ' + circles[i].y + '}];';
        }
        trace(code);
    }
    
    stage.addEventListener(MouseEvent.MOUSE_DOWN, generateCircles);
    stage.addEventListener(KeyboardEvent.KEY_DOWN, generateCode);
    
    在输出面板中

    最简单的版本可能是使用jsfl,您可以只使用DrawingObject,不使用电影剪辑,只需移动它们,然后按下神奇的shorcut键。 更灵活的版本是迷你编辑器grid thingy


    HTH

    印象深刻。Javascript代码片段就是我正在寻找的那种东西,并且工作得很好。唯一轻微的问题是“标签”或“标签”问题;我画了一张图,我把每个圆圈都标上了“圆圈1”、“圆圈2”等。。不知何故,我需要这些信息和位置。谢谢你的回复。我明白了,然后看看第一段和第二段。如果您从代码(包括名称)生成圆,或者您在舞台上命名圆电影剪辑,然后生成代码。jsfl更新,如果您使用组或绘图对象,hames将为空,但是如果您使用MovieClips,它应该拾取实例名称。有你的选择:)适当的印象。Javascript代码片段就是我正在寻找的那种东西,并且工作得很好。唯一轻微的问题是“标签”或“标签”问题;我画了一张图,我把每个圆圈都标上了“圆圈1”、“圆圈2”等。。不知何故,我需要这些信息和位置。谢谢你的回复。我明白了,然后看看第一段和第二段。如果您从代码(包括名称)生成圆,或者您在舞台上命名圆电影剪辑,然后生成代码。jsfl更新,如果您使用组或绘图对象,hames将为空,但是如果您使用MovieClips,它应该拾取实例名称。有你的选择:)
    var doc = fl.getDocumentDOM();
    var sel = doc.selection;
    var selStr = 'var circles:Array = [';
    if(sel){
        var elNum = sel.length;
        for(var i = 0 ; i < elNum ; i++){
            if(i < elNum-1) selStr += '{name: '+ sel[i].name +', x: ' + sel[i].x + ',y:' + sel[i].y + '},';
            else            selStr += '{name: '+ sel[i].name +', x: ' + sel[i].x + ',y:' + sel[i].y + '}];';
        }
        fl.trace(selStr);
    }
    
    var circles:Array = [{name: c1, x: 286.95,y:172},{name: c1, x: 180.95,y:320},{name: c1, x: 92.95,y:126},{name: c1, x: 184.95,y:190},{name: c1, x: 392.95,y:112},{name: c1, x: 316.95,y:226},{name: c1, x: 84.95,y:207},{name: c1, x: 84.95,y:85}];