2011-11-23 113 views
3

我试图在随机位置绘制两个圆圈,并在这两个圆圈之间绘制一条线 - 但闪光似乎没有在我的圆圈中注册x | y坐标码。我将如何做到这一点。更好的是,我该如何做到这一点,如果我拖动其中一个圆圈,这条线将保持这些点之间的连接?这里是我的代码:flash as3在两个圆圈之间绘制一条线

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

包含该圆的精灵在技术上仍然在0,0,您刚刚在随机位置绘制了该圆。如果您没有保存该位置,那么在此之后您将无法再引用它。

相反画圆有偏移的,你应该在精灵的中心画出来 - 并移动精灵随机位置:

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

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

3

您不是设置圆的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事件,并在线圈移动时更新线条。

+0

是的,绝对正确:) –