首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于用户选择在AS3中创建可重用形状

基于用户选择在AS3中创建可重用形状
EN

Stack Overflow用户
提问于 2012-08-27 16:52:04
回答 1查看 396关注 0票数 0

目前,我正在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坐标,然后搜索该数组,找到第一个块实例,然后从这里绘制形状,这可能是前进的方向,但这就是我的想法。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-27 17:24:24

我的建议是使用位图作为这种形状的基类,以完全透明的方式初始化它,然后用调整后的X&Y值在bitmap.bitmapData上绘制()MC,然后使用所提供的X&Y将该位图放置在“较大的网格”上。

代码语言:javascript
复制
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,而不是位图。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12146151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档