2014-01-29 24 views
0

這是我的代碼(冷凝於所討論的功能):線型()內爲環路產生斷開角度

public function redrawNewShape() { 
     var tempAX:Number; 
     var tempAY:Number; 
     var tempBX:Number; 
     var tempBY:Number; 
     var tempLineThickness:Number; 
     var tempLineColour:uint; 
     var tempLineJoints:String; 
     var tempLineMiter:Number; 
     var tempSprite:Sprite; 

     tempSprite = new Sprite; 
     tempSprite = shapeArray[1]; 
     tempSprite.graphics.clear() 

     if (fillTransparency == 0) {    
      tempSprite.graphics.beginFill(shapeArray[3],1); 
     } 

     tempSprite.graphics.moveTo(linesArray[(linesArray.length - 2)],linesArray[(linesArray.length - 1)]); 

     for (var d = 0; d < (linesArray.length/4); d++) { 
      tempAX = linesArray[(d*4)]; 
      tempAY = linesArray[((d*4)+1)]; 
      tempBX = linesArray[((d*4)+2)]; 
      tempBY = linesArray[((d*4)+3)]; 
      tempLineThickness = lineStyleArray[(d*4)]; 
      tempLineColour = lineStyleArray[((d*4)+1)]; 
      tempLineMiter = lineStyleArray[((d*4)+3)]; 

      if (lineStyleArray[((d*4)+2)] == 0) { 
       tempLineJoints = JointStyle.MITER; 
      } else if (lineStyleArray[((d*4)+2)] == 1) { 
       tempLineJoints = JointStyle.ROUND; 
      } else if (lineStyleArray[((d*4)+2)] == 2) { 
       tempLineJoints = JointStyle.BEVEL; 
      } 

      tempSprite.graphics.lineStyle(tempLineThickness,tempLineColour,1,false,"normal","none",tempLineJoints,tempLineMiter) 
      tempSprite.graphics.curveTo(tempAX,tempAY,tempBX,BY)     
      } 

     if (fillTransparency == 0) {    
      tempSprite.graphics.endFill(); 
     } 
    } 

此功能重繪通過屬性在陣列shapeArray,linesArray定義在我的程序的形狀,和lineStyleArray。問題是無論我設置的JointStyle是什麼,我的程序中的形狀角度都沒有連接。我不能上傳示例圖片,因爲我沒有得到至少10個聲望,想象兩條粗線,沒有帽子以90度的角度連接,而不是拐角被圓化,斜切或者斜着,而是有一個在兩條線的寬度的一半寬度的形狀間隙)

我不明白爲什麼,如果我把tempSprite.graphics.lineStyle放在for循環之外,角度是連接的。它在lineStyle的Actionscript 3.0參考中聲明:

「您可以在繪製路徑的過程中調用lineStyle()方法,以便爲路徑內的不同線段指定不同的樣式。

那麼爲什麼它不能在循環內工作?

實施例把LINESTYLE外部for循環(與手動添加的臨時值):

public function redrawNewShape() { 
     var tempAX:Number; 
     var tempAY:Number; 
     var tempBX:Number; 
     var tempBY:Number; 
     var tempLineThickness:Number; 
     var tempLineColour:uint; 
     var tempLineJoints:String; 
     var tempLineMiter:Number; 
     var tempSprite:Sprite; 

     tempSprite = new Sprite; 
     tempSprite = shapeArray[1]; 
     tempSprite.graphics.clear() 

     if (fillTransparency == 0) {    
      tempSprite.graphics.beginFill(shapeArray[3],1); 
     } 

     tempSprite.graphics.moveTo(linesArray[(linesArray.length - 2)],linesArray[(linesArray.length - 1)]); 
     tempSprite.graphics.lineStyle(10,0x000000,1,false,"normal","none","miter",3) 

     for (var d = 0; d < (linesArray.length/4); d++) { 
      tempAX = linesArray[(d*4)]; 
      tempAY = linesArray[((d*4)+1)]; 
      tempBX = linesArray[((d*4)+2)]; 
      tempBY = linesArray[((d*4)+3)]; 
      tempLineThickness = lineStyleArray[(d*4)]; 
      tempLineColour = lineStyleArray[((d*4)+1)]; 
      tempLineMiter = lineStyleArray[((d*4)+3)]; 

      if (lineStyleArray[((d*4)+2)] == 0) { 
       tempLineJoints = JointStyle.MITER; 
      } else if (lineStyleArray[((d*4)+2)] == 1) { 
       tempLineJoints = JointStyle.ROUND; 
      } else if (lineStyleArray[((d*4)+2)] == 2) { 
       tempLineJoints = JointStyle.BEVEL; 
      } 

      tempSprite.graphics.curveTo(tempAX,tempAY,tempBX,tempBY)     
      } 

     if (fillTransparency == 0) {    
      tempSprite.graphics.endFill(); 
     } 
    } 

回答

0

很可能在一個路徑的中途改變LINESTYLE重新開始一個新的段和應用當前CapStyle。

嘗試找出計算關節的難點,以防您改變拐角處的線條粗細。

+0

當我將CapStyle更改爲Round或Square時,角度沒有間隙。但是我不能使用我想要的Mitre JointStyle。 – user3247094

+0

我的回答是爲了告訴你,這太難實施了,因此不受支持。 –