flash as3 在两个圆之间画一条线

问题描述 投票:0回答:2

我试图在随机位置绘制两个圆圈,并在这两个圆圈之间画一条线 - 但flash似乎没有在我的代码中注册圆圈的xy坐标。

我该怎么做?更好的是,我该如何做到这一点,以便如果我拖动其中一个圆圈,该线将保持这些圆圈之间的连接?

这是我的代码:

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();
actionscript-3 flash drawing
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_MOVE
Event.ENTER_FRAME
。当您拖动圆圈时,事件应该调用您的
drawLine()
函数。另外,将
lineCanvas.graphics.clear();
添加到
drawLine
的开头。

© www.soinside.com 2019 - 2024. All rights reserved.