Actionscript 3 使用actionscript 3 Flash cs6使用矩形或线条创建二维重复图案
大家好,, 我想根据砖块的大小创建一个二维图案。在本例中为190长X 60高。我有一个400长x300高的预览区。我有一个用于预览区域的遮罩,因此此预览区域之外的任何内容都将被隐藏。到目前为止,我有一个代码,它将第一个矩形/砖正确地显示为预览movieclip的子movieclip,并按大小和位置显示到预览区域中。 但我找不到一个简单的方法来复制或克隆这部砖块电影剪辑,以实现所附图像中显示的模式。此操作发生在按钮的单击事件上。非常感谢您的任何帮助。我还想清理这个预览区域之前显示的任何预览第一。我有一个for循环要删除child,但它一次只删除一个。 先谢谢你Actionscript 3 使用actionscript 3 Flash cs6使用矩形或线条创建二维重复图案,actionscript-3,Actionscript 3,大家好,, 我想根据砖块的大小创建一个二维图案。在本例中为190长X 60高。我有一个400长x300高的预览区。我有一个用于预览区域的遮罩,因此此预览区域之外的任何内容都将被隐藏。到目前为止,我有一个代码,它将第一个矩形/砖正确地显示为预览movieclip的子movieclip,并按大小和位置显示到预览区域中。 但我找不到一个简单的方法来复制或克隆这部砖块电影剪辑,以实现所附图像中显示的模式。此操作发生在按钮的单击事件上。非常感谢您的任何帮助。我还想清理这个预览区域之前显示的任何预览第一。我
//Checks if all required textfields have valid data -- if yes then true else false
if(Vdata == true){
//Here I should check and clean the preview area and any children previously added.
var Pview_mc:MovieClip = new MovieClip; //Main moiveclip which holds all rectangles.
Pview_mc.name = "Pview_mc"; //name the instance so that easy to remove later on.
var rectangle:MovieClip = new MovieClip; // initializing the variable
rectangle.graphics.lineStyle(0, 0x990000, 1); //defines line style (thickness, colour, alpha)
rectangle.graphics.drawRect(0, 0, Number(Txt_ST.text),Number(Txt_HT.text)); // (x spacing, y spacing, width, height)
Pview_mc.addChild(rectangle); // adds rectangle to Pview_mc movieclip
Preview_Area.addChild(Pview_mc); // adds the Pview_mc to the Preview_Area MovieClip
rectangle.y = rectangle.y-Number(Txt_HT.text); // positions the rectangle.
}
我快速而肮脏地实现了砖块图案绘制功能。它不是优化的,只是绘制您想要的图案。
为简单起见,我不使用子对象,而是直接绘制到MovieClip。该函数在每次调用时清除并绘制模式。下图显示了可能的结果 绘图功能:
// graphics - Object to draw to
// origin_x - Center of the top left brick
// origin_y - Center of the top left brick
// brick_count_u - Number of bricks along the x-axis
// brick_count_v - Number of brick along the y-axis
// brick_w - Brick width
// brick_h - Brick height
// gap - Brick gap
function draw_bricks(
graphics :Graphics,
origin_x :Number,
origin_y :Number,
brick_count_u :int,
brick_count_v :int,
brick_w :Number,
brick_h :Number,
gap :Number) :void
{
graphics.clear();
graphics.lineStyle(0.0, 0x00FF00, 1.0);
//
// For every brick along y-axis
for (var v :int = 0; v < brick_count_v; v += 1) {
//
// [ row ordinate ]---|
// |
// [ base offset ]---| |
// | |
// v v
var brick_y :Number = origin_y + ((brick_h + gap) * v);
//
// For every brick along x-axis
for (var u :int = 0; u < brick_count_u; u += 1) {
//
// [ odd row offset ]---|
// | [ column abscissa ]---|
// [ base offset ]---| | |
// | | |
// v v v
var brick_x :Number = origin_x - (brick_w * 0.5 * (v % 2)) + ((brick_w + gap) * u);
//
// Draw brick centered at {brick_x, brick_y}
graphics.drawRect(brick_x - brick_w * 0.5, brick_y - brick_h * 0.5, brick_w, brick_h);
}
}
}
var bricks :MovieClip = new MovieClip;
addChild(bricks);
draw_bricks(bricks.graphics, 0.0, 0.0, 8, 8, 190.0, 60.0, 10.0);
如果您实际上不需要此砖墙的显示对象层次结构,我建议您使用此方法,因为这样您就不需要删除或创建任何“砖块对象”,只需刷新单个遮罩显示对象即可
注意:您仍然需要计算每个轴的最佳砖块数。注意:请记住,在闪光灯中,x轴指向右侧,y轴指向下方。谢谢。我想说这一点也不快也不脏。这是非常恰当、清晰和简单的逻辑。令人惊叹的。根据你的建议,我需要在这段代码上做很多工作,因为我只是一个初学者,还没有正式学习编程。但你的例子是一个完美的开始。我对您的代码做了一些更改,将最终模式定位到所需的位置,只是为了让自己更清楚。我将张贴我的最终输出一旦完成。这种模式只是第一种。总共至少有20种模式。y轴与吸入的acad相反。