开发者

Change pixel color with ActionScript 3

Say I have drawn a triangle with:

import flash.geom.Matrix;

function drawTriangle(sideLength:uint):void {
    var triangleHeight:uint = Math.sqrt(Math.pow(sideLength,2) - Math.pow(sideLength / 2,2));
    var triangleShape:Shape = new Shape();
    triangleShape.graphics.beginFill(0x2147AB);
    triangleShape.graphics.lineStyle(1,0xff00ff00);
    triangleShape.graphics.moveTo(sideLength/2, 0);
    triangleShape.graphics.lineTo(sideLength, triangleHeight);
    triangleShape.graphics.lineTo(0, triangleHeight);
    triangleShape.graphics.lineTo(sideLength/2, 0);
    addChild(triangleShape);

    var matrix:Matrix = new Matrix;
    matrix.translate(50, 50);
    transform.matrix = matrix;
}

drawTriangle(400);

How can I achieve the following:

When the user clicks a point inside the triangle, we will get the x and y coordinates, do some calculation with those values and get some (lots) of pixel coordiantes accordingly (all of those calculated points will be within the triangle). And finally, cha开发者_StackOverflownge the color of those points (something different than triangleShape fill color).


Here's a solution using a triangle drawn to some BitmapData, added to a Bitmap, and then contained in a Sprite.

var box:Sprite = new Sprite();
box.graphics.beginFill(0x000000, 1);
box.graphics.lineStyle(1, 0x000000, 1);
box.graphics.moveTo(100, 50);
box.graphics.lineTo(50, 100);
box.graphics.lineTo(150, 100);
box.graphics.lineTo(100, 50);
box.graphics.endFill();
addChild(box);
var boxCopied:BitmapData = new BitmapData(box.width, box.height, true, 0x00000000);
var matr:Matrix = new Matrix();
matr.tx = -50;
matr.ty = -50;
boxCopied.draw(box, matr);
box.graphics.clear();
var boxCopy:Bitmap = new Bitmap(boxCopied);
box.addChild(boxCopy);
box.addEventListener(MouseEvent.CLICK, clicked, false, 0, true);

function clicked(evt:MouseEvent):void
{
    for(var i=0;i<50;i++)
    {
        var pixel = new Point(Math.floor(Math.random() * boxCopy.width), Math.floor(Math.random() * boxCopy.height));
        if(boxCopied.hitTest(new Point(boxCopy.x, boxCopy.y), 1, pixel))
        {
            boxCopied.setPixel32(pixel.x, pixel.y, Math.random() * 0xFFFFFFFF);
        }
    }
}

http://www.swfupload.com/view/162170.htm

Note I'm using setPixel32 to send a 32-bit integer (essentially an ARBG instead of RGB) to manipulate alpha as well.

50 random pixels are being generated. If they're inside of the triangle, they're kept.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜