不到40行代码的填色游戏 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【meiwen.anslib.com - 电脑资料】

   

今天一个朋友问我怎么做花纹填充上色,就花点时间给他做了一个,

不到40行代码的填色游戏

    思路是利用beginBitmapFill画矩形,然后用待填充的图形做mask。

    舞台上有两个mc,一个是colors,一个是canvas,另外还有一个描边图形

    colors负责选色,canvas里面是多个分离的图形,也就是待填充mc(无需取名)

    看一下代码:

    //先是定义一个画矩形函数

    import flash.display.BitmapData;

    import flash.geom.*;

    function createRectangle(x:Number, y:Number, w:Number, h:Number, mc:MovieClip) {

    mc.moveTo(x, y);

    mc.lineTo(x+w, y);

    mc.lineTo(x+w, y+h);

    mc.lineTo(x, y+h);

    mc.lineTo(x, y);

    mc.endFill();

    }

    //然后对canvas的每个mc写onRelease响应

    for (i in canvas) {

    if (typeof (canvas[i]) == "movieclip") {

    if (canvas[i].type != "rect") {

    canvas[i].onRelease = function() {

    //如果已经被上色了,就会有一个与之绑定的_mc,再次上色之前,要把这个link_mc删掉

    if (this.link_mc._name) {

    this.link_mc._bmp.dispose();

    this.link_mc.removeMovieClip();

    }

    //根据_mc的位置和大小,画一个匹配的矩形,然后进行类型和链接的设置

    var rect_mc:MovieClip = canvas.createEmptyMovieClip("rect"+canvas.getNextHighestDepth(), canvas.getNextHighestDepth());

    rect_mc.type = "rect";

    this.link_mc = rect_mc;

    rect_mc.bmp = new BitmapData(20, 20, false, 0xFF0000);

    rect_mc.bmp.draw(select_color_mc);

    rect_mc.beginBitmapFill(rect_mc.bmp);

    var r:Object = this.getBounds(canvas);

    createRectangle(r.xMin, r.yMin, r.xMax-r.xMin, r.yMax-r.yMin, rect_mc);

    //最后做一个mask,这样就达到了上色的效果

    rect_mc.setMask(this);

    };

    }

    }

    }

    //对颜色拾取器进行onRelease设定

    for (i in colors) {

    if (typeof (colors[i]) == "movieclip") {

    colors[i].onRelease = function() {

    select_color_mc=this

    };

    }

    }

    是不是很简单,这就是BitmapData的强大功效啦!

最新文章