Изменить цвет пикселя с помощью ActionScript 3 - PullRequest
0 голосов
/ 10 марта 2011

Скажем, я нарисовал треугольник с:

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);

Как мне добиться следующего:

Когда пользователь щелкает точку внутри треугольника, мыполучит координаты x и y, выполнит некоторые вычисления с этими значениями и получит несколько (много) пиксельных координат соответственно (все эти вычисленные точки будут в треугольнике).И наконец, измените цвет этих точек (что-то отличное от цвета заливки треугольника).

1 Ответ

2 голосов
/ 10 марта 2011

Вот решение, использующее треугольник, нарисованный для некоторого BitmapData, добавленный к Bitmap, а затем содержащийся в 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

Примечание. Я использую setPixel32 для отправки 32-разрядного целого числа (по сути, ARBG вместо RGB), чтобы также манипулировать альфой.

50 генерируются случайные пиксели.Если они внутри треугольника, их держат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...