使用带有actionscript 3 Flash cs6的矩形或线条创建2D重复模式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用带有actionscript 3 Flash cs6的矩形或线条创建2D重复模式相关的知识,希望对你有一定的参考价值。

enter image description here

大家好,我想根据砖的大小创建一个2D图案。在这个例子中190长度X 60高度。我有一个400长度X 300高度的预览区域。我有一个预览区域的掩码,因此隐藏此预览区域之外的任何内容。到目前为止,我有一个代码,它将第一个矩形/砖正确显示为预览动画片段的子动画片段,进入大小和位置的预览区域。但是我找不到复制或克隆这个砖动画片段的简单方法来实现附加图像中显示的模式。此操作发生在按钮的单击事件上。非常感谢任何形式的帮助。我还想首先清理此预览区域以用于之前显示的任何预览。我有一个for循环删除子,但它一次只删除一个。非常感谢提前。

//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。该函数在每次调用时清除并绘制模式。下图显示了可能的结果。

draw_bricks() result

绘图功能:

// 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轴指向下方。

以上是关于使用带有actionscript 3 Flash cs6的矩形或线条创建2D重复模式的主要内容,如果未能解决你的问题,请参考以下文章

ActionScript 3 使用Flash / Actionscript 3进行3D翻转效果

ActionScript 3 使用Actionscript 3 / Flash进行流体/果冻(ish)模拟

ActionScript 3 - 在外部类中使用 MovieClip

可以在没有 Adob​​e Flash Professional 的情况下使用 ActionScript 3?

ActionScript 3 使用AS3从Flash触发Javascript

Actionscript 3 vs Haxe:为新的 Flash 项目选择哪个?