目前,我正在Adobe专业平台上开发一个教育CS5应用程序,使用ActionScript 3编程语言。
在我的程序中,用户需要将一个形状绘制到一个4x4平方网格上,这是我使用一个贯穿16次的For循环生成的。
在For循环构造网格时,它添加了相同的23x23像素平方MovieClip的16个子实例,这些子实例在四行和四列中布局相等,每个MovieClip都分配了一个唯一的ID号,从1-16到一个鼠标向下侦听器事件,为用户交互做好了准备。
如果用户单击网格中的一个正方形,在绘制和选择其形状的过程中,MovieClip的颜色将首先更改为向用户表示它已被选中以供包含。
其次,我还设置了一个基于布尔值的Array 0-15,它链接到网格的相应ID号,因此,例如,如果我在4x4网格中选择左上角,则布尔数组的属性将从false变为true,同样地,如果我沿着网格的第二行选择第三个正方形,数组的6个属性也会执行同样的操作。
现在使用这种技术并引用数组,我总是可以知道哪些块是由我的用户选择的,通过在我的程序中的后续幻灯片上运行另一个For循环,我成功地输出了基于我的“选择”布尔数组的形状,在另一个4x4网格的范围内,我的用户设计了相同的形状,如果任何数组值设置为True,所选块的颜色从灰色变为黑色。
现在我的问题是,我的用户随后需要在第一个网格上绘制他们设计的形状,并将其绘制到一个较大的第二个网格上(在某些情况下高达8-9次)。这个网格比4x4大得多,确切地说是24x12(288个块)。
现在我需要的是当我的用户点击第二个更大的网格时,我希望将他们设计的形状的输出作为一个全新的MovieClip添加到舞台上。
但重要的是,这种形状需要缩小。例如,如果用户通过选择块2、3、6、7在第一个网格上创建一个方形形状;我不希望将一个16块MovieClip (92x92像素,基于我的23x23像素块)添加到更大的网格中,其中有四个块遮住了不同的颜色,我希望从第二个网格上选择的上-左网格方格中添加一个4块,即正方形形状(46x46像素,基于我的23x23块)。
理想情况下,我希望使用形状绘图工具以编程方式创建用户的绘图形状,并在函数中这样做,这样,每次用户进入第二个网格区域并更新用户的形状时,如果用户返回并在第一个网格中对其进行修改,我就可以运行该函数。这也会给我的范围,也改变形状的颜色之前,增加它的孩子到我的阶段,这是另一个领域的功能,我需要和另一个原因,我想要做这个形状编程。
我想象在另一个数组中从第一个网格中捕获块的x/y坐标,然后搜索该数组,找到第一个块实例,然后从这里绘制形状,这可能是前进的方向,但这就是我的想法。
任何关于如何做到这一点的想法或建议都是非常受欢迎的。非常感谢。
发布于 2012-08-27 17:24:24
我的建议是使用位图作为这种形状的基类,以完全透明的方式初始化它,然后用调整后的X&Y值在bitmap.bitmapData上绘制()MC,然后使用所提供的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,而不是位图。
https://stackoverflow.com/questions/12146151
复制相似问题