2011-11-23 174 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

是的,絕對正確:) –