flash as3 рисует линию между двумя кругами - PullRequest
3 голосов
/ 23 ноября 2011

Я пытаюсь нарисовать два круга в случайных положениях и провести линию между этими двумя кругами - но, похоже, flash не регистрирует координаты x | y круга в моем коде.Как бы я это сделал?А еще лучше, как бы я сделал это так, чтобы, если бы я перетащил один из кругов, линия поддерживала связь между этими точками?Вот мой код:

var sw = stage.stageWidth;
var sh = stage.stageHeight;
var cr = 6; //circle radius
var circleColor = 0x000000;
var numCircles = 2;
var circleArray = [];
var lineCanvas:Sprite = new Sprite();
addChild(lineCanvas);
var lineColor = 0x000000;
var lineWeight = 1;

function init(){
    drawCircle();
}

function drawCircle(){
    for (var i = 0; i<numCircles; i++){
        var xPos = randomRange(cr, sw-cr);
        var yPos = randomRange(cr, sh-cr);
        var newCircle:Shape = new Shape();
        newCircle.graphics.beginFill(circleColor);
        newCircle.graphics.drawCircle(xPos,yPos,cr);
        newCircle.graphics.endFill();
        circleArray.push(newCircle);
        addChild(newCircle);
    }
    drawLine();
}

function drawLine(){
    for (var i = 0; i<numCircles-1; i++){
        trace (circleArray[i].x);
        lineCanvas.graphics.lineStyle(lineWeight,lineColor);
        lineCanvas.graphics.moveTo(circleArray[i].x,circleArray[i].y);
        lineCanvas.graphics.lineTo(circleArray[i+1].x,circleArray[i+1].y);
    }
}

function randomRange(minNum:Number, maxNum:Number):Number {  
    return (Math.floor(Math.random() * (maxNum - minNum + 1)) + minNum);  
}

init();

Ответы [ 2 ]

3 голосов
/ 23 ноября 2011

Вы не устанавливаете свойства круга x, y, вы рисуете в положении x, y.Это отличается от установки свойств x и y.Даже если вы рисуете в xPos, yPos в вашем круге x, y равны нулю.Вместо рисования в точке x, y вам нужно нарисовать в 0, 0, а затем переместить круг в точке x, y, установив свойства.

newCircle.graphics.drawCircle(0, 0, cr);
newCircle.x = xPos;
newCircle.y = yPos;

Если вы хотите непрерывно обновлять строки, вы можете прослушать событие onFrame и обновить строку, если какой-либо круг переместился.

2 голосов
/ 23 ноября 2011

Спрайт, содержащий круг, технически все еще находится на 0,0, вы просто нарисовали круг в случайной позиции.Если вы не сохраните эту позицию, вы не сможете ссылаться на нее после этого.

Вместо того, чтобы рисовать круг со смещением, вы должны нарисовать его в центре спрайта - и переместитьэто спрайт в случайную позицию:

newCircle.graphics.drawCircle(0, 0, cr);
newCircle.x = xPos;
newCircle.y = yPos;

Чтобы обновить строку при перемещении окружностей, вы должны добавить прослушиватель событий MouseEvent.MOUSE_MOVE или Event.ENTER_FRAME.Когда вы перетаскиваете круги, событие должно вызывать вашу функцию drawLine().Также добавьте lineCanvas.graphics.clear(); к началу drawLine.

...