Actionscript 3 根据用户的选择在AS3中创建可重用形状

Actionscript 3 根据用户的选择在AS3中创建可重用形状,actionscript-3,Actionscript 3,我目前正在Adobe CS5 Flash Professional平台上使用ActionScript 3编程语言开发一个教育级Flash应用程序 在我的程序中,用户需要在一个4x4的正方形网格上绘制一个形状,我使用一个贯穿16次的For循环生成了这个网格 在For循环构造网格时,它添加了相同23x23像素正方形MovieClip的16个子实例,这些MovieClip平均分布在四行四列中,每个MovieClip都被分配了一个从1到16的唯一ID号和一个鼠标按下侦听器事件,为用户交互做好准备 如果用

我目前正在Adobe CS5 Flash Professional平台上使用ActionScript 3编程语言开发一个教育级Flash应用程序

在我的程序中,用户需要在一个4x4的正方形网格上绘制一个形状,我使用一个贯穿16次的For循环生成了这个网格

在For循环构造网格时,它添加了相同23x23像素正方形MovieClip的16个子实例,这些MovieClip平均分布在四行四列中,每个MovieClip都被分配了一个从1到16的唯一ID号和一个鼠标按下侦听器事件,为用户交互做好准备

如果用户在绘制和选择其形状的过程中单击网格中的一个正方形,MovieClip的颜色将首先改变,以向用户表示它已被选择用于包含

其次,我还设置了一个基于布尔值的数组[0-15],它链接到网格的相应ID号,因此,例如,如果我在4x4网格中选择左上角的正方形,布尔值数组的[0]属性将从false变为true,同样,如果我在网格的第二行选择第三个正方形[6]数组的属性将执行相同的操作,以此类推

现在使用这种技术并参考数组,我可以随时知道我的用户选择了哪些块,通过在我的程序的后续幻灯片上运行另一个For循环,我已经根据我的“selection”布尔数组,在另一个4x4网格的范围内输出了与我的用户设计的相同的形状,当选定块的颜色从灰色变为黑色时,如果任何数组值设置为True

现在我的问题是,我的用户随后需要将他们在第一个网格上生成的设计形状绘制到更大的第二个网格上,在某些情况下,绘制量大达8-9倍。该网格远大于4x4网格,即24 x 12,即288个区块

现在我需要的是,当我的用户点击第二个更大的网格时,我希望他们设计的形状的输出作为一个全新的MovieClip添加到舞台上

但重要的是,形状需要裁剪。例如,如果用户通过选择块2、3、6、7在第一个网格上形成正方形;我不想要一个16块MovieClip 92x92像素,基于我的23x23像素块被添加到更大的网格中,四个块以不同的颜色着色,我想要一个4块,正方形46 x 46像素,基于我的23x23块被添加,从你在第二个网格上选择的左上角网格正方形开始

理想情况下,我希望使用shape Drawing工具以编程方式创建用户打印的形状,并在函数中执行此操作,这样,如果用户返回并在第一个网格中修改了形状,那么每次用户进入第二个网格区域时,我都可以运行该函数并更新用户的形状。这也给了我在将其子项添加到我的阶段之前更改形状颜色的范围,这是我需要的另一个功能领域,也是我希望以编程方式执行此形状的另一个原因

我想象从另一个数组中的第一个网格捕获块的x/y坐标,然后在该数组中搜索以找到第一个块实例,然后从该点绘制形状,这可能是前进的方向,但这是我所想的


任何关于如何做到这一点的想法或建议都是非常受欢迎的。非常感谢

我的建议是,使用位图作为此类形状的基类,用完全透明的方式初始化它,然后在该位图上绘制MCs。使用调整的X&Y值绘制位图数据,然后使用提供的X&Y将该位图放置在更大的网格上

var bd:BitmapData=new BitmapData(23*4,23*4,true,0x0);
var mat:Matrix=new Matrix();
mat.tx=-1*LeftCornerX;
mat.ty=-1*LeftCornerY;
for (i=0;i<16;i++) if (BlockMCsSelected[i])  bd.draw(BlockMCs[i],mat);
var bm:Bitmap=new Bitmap(bd);
bm.x=SuppliedX;
bm.y=SuppliedY;
LargerGrid.addChild(bm);

基本上,如果您正确指定了输入数据,这应该可以做到。但是,如果您需要它来接收事件,请将此位图封装到一个Sprite对象中,这样可以处理事件,并为Sprite而不是位图提供坐标。

感谢@Vesper的提示响应。这是一个我没有想到的有用的方法。我将尝试根据您在此处发布的内容对使用位图进行一些调查,以达到我所需的效果。我必须将位图转换为精灵,因为它需要接收事件。您是否建议在用户在较小的网格上绘制形状时创建位图?使用完全透明?我今天回到这个问题&当形状重新添加到舞台上时,我正在努力实现形状的x/y坐标。您起草的For循环示例沿正确的线条进行查看;但我现在得到的结果是添加的正方形的正确数量,它们是在第一个网格上选择的,但是它们彼此重叠形成一个正方形。我已经在2个单独的数组x/y中成功地捕捉到了每个正方形的x/y坐标,但是,通过这个数组,一次重新添加一个正方形的最佳方法是什么 指定x/y坐标处的For回路。