使用 Flash AS3 在两个圆之间绘制一条线

3

我想在随机位置绘制两个圆,并在这些圆之间画一条直线,但 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

您没有设置圆的x、y属性,而是在x、y位置上绘制。这与设置x和y属性不同。即使您在xPos、yPos处进行绘制,您的圆的x、y值也为零。您需要在0、0处绘制,然后通过设置属性将圆移动到x、y处,而不是在x、y处进行绘制。

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

如果您想要连续更新线条,那么可以监听onFrame事件,并在任何圆形移动时更新线条。

2

包含圆形的精灵在技术上仍然位于0,0,你只是在随机位置绘制了圆形。如果不保存该位置,之后就无法引用它。

与其使用偏移量绘制圆形,你应该将其绘制在精灵中心,并将该精灵移动到随机位置:

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

当您移动圆圈时更新线条,您应添加事件侦听器MouseEvent.MOUSE_MOVEEvent.ENTER_FRAME。当您拖动圆圈时,事件应调用您的drawLine()函数。此外,在drawLine的开头添加lineCanvas.graphics.clear();


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接