2009-12-26 3 views
1

내가 캔버스에 표시되는 점의 집합이 이동 연결 : 다음 점들을 연결, 다른 점 (코드 키 비트 꺼냈다)

// Drop points based on x y coords 
for (var i = 0; i < 50; i++) { 
    itemPoint[i] = new mcDot(); 
    itemPoint[i].x = 500*Math.random(); 
    itemPoint[i].y = 500*Math.random(); 

    // Set up drag & drop 
    initDragger(itemPoint[i]); 
    itemPoint[i].buttonMode = true; 

    addChild(itemPoint[i]); 
} 

- 하나 점 50 개 연결

// Draw connections 
for (i = 0; i < 50; i++) { 
     for (j = 0; j < 50; j++) { 
     // Is there a connection in the matrix? 
     if (connectMatrix[i][j] > 0) { 
      itemConnect[k] = new Shape(); 

      itemConnect[k].graphics.lineStyle(1, 0x000000); 

      // Connect the line to the dots 
      itemConnect[k].graphics.moveTo(itemPoint[i].x, itemPoint[i].y); 
      itemConnect[k].graphics.lineTo(itemPoint[j].x, itemPoint[j].y); 
      addChild(itemConnect[k++]); 
     } 
    } 
} 

내가 드래그를 가지고 점에 대한 작업 드롭 할 수 : 그러나

/** Drag and drop functions */ 
function initDragger(mc:MovieClip):void { 
    mc.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); 
    mc.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); 
} 

function mouseDownHandler(e:MouseEvent):void { 
    e.currentTarget.startDrag(); 
} 
function mouseUpHandler(e:MouseEvent):void { 
    e.currentTarget.stopDrag(); 
} 

을, 정말이야입니다 점을 옮길 때 선을 다시 그리는 방법을 생각해보십시오. 또한 단일 점에 연결된 많은 선이있을 수 있습니다. 어떤 점이 어떤 점에 연결되어 있는지 어떻게 든 등록해야합니까? 어떻게 이것을 기준으로 선을 수정합니까?

감사합니다.

답변

2

동일한 기능을 복제하려고했습니다. 그리고 이것이 제가 얻은 것입니다 : 점을 그리기위한 Dot 클래스입니다.

package { 
    import flash.display.Sprite; 
    public class Dot extends Sprite { 
    public static var counter:Number = 0; 
    public var id:Number; 
    public function Dot():void { 
     this.graphics.beginFill(0); 
     this.graphics.drawCircle(5,5,5); 
     this.graphics.endFill(); 
     id = counter++; 
    } 
    } 
}
그리고 이것은 Test 클래스입니다.
package { 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.events.MouseEvent; 
    import flash.display.Shape;

public class Test extends Sprite {

var num:Number = 5; 
var item:Array = new Array(num); 
var connection:Array = new Array(num); 

public function Test():void{ 
    initItem(); 
    initConnection(); 
} 

private function initItem():void { 
    for (var i:Number = 0; i<num; i++) { 
    item[i]= new Dot(); 
    item[i].x = 500*Math.random(); 
    item[i].y = 350*Math.random(); 
    addChild(item[i]); 
    initDragger(item[i]); 
    } 
} 

private function initDragger(dot:Dot):void { 
    dot.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); 
    dot.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); 
} 

function mouseDownHandler(e:MouseEvent):void { 
    e.currentTarget.startDrag(); 
    e.target.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove); 
} 
function mouseUpHandler(e:MouseEvent):void { 
    e.currentTarget.stopDrag(); 
    e.target.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove); 
    redrawLines(e.target.id); 
} 
function redrawLines(i:Number):void { 
    for (var j:Number = 0; j< num; j++) { 
    if(connection[i][j] != null) { 
     removeChild(connection[i][j]); 
     connection[i][j] = new Shape(); 
     connection[i][j].graphics.lineStyle(1, 0x000000); 
     connection[i][j].graphics.moveTo(item[i].x, item[i].y); 
     connection[i][j].graphics.lineTo(item[j].x, item[j].y); 
     addChild(connection[i][j]); 
     connection[j][i] = connection[i][j]; 
    } 
    } 
} 
function onMouseMove(e:MouseEvent):void { 
    redrawLines(e.target.id); 
} 

private function initConnection():void { 
    for (var i:Number = 0; i<num; i++) { 
    connection[i] = new Array(num); 
    for (var j:Number = 0; j<num; j++) { 
     if (j != i) { 
     if (connection[j] != undefined) { 
      connection[i][j] = connection[j][i]; 
      trace("Duplicate"); 
     } 
     else if (Math.random() > 0.5){ 
     connection[i][j] = new Shape(); 
     connection[i][j].graphics.lineStyle(1, 0x000000); 
     connection[i][j].graphics.moveTo(item[i].x, item[i].y); 
     connection[i][j].graphics.lineTo(item[j].x, item[j].y); 
     addChild(connection[i][j]); 
     } 
     else { 
      connection[i][j] = null; 
     } 
     } 
     else { 
     connection[i][j] = null; 
     } 
     trace("connecting " + i + " to " + j +" with " + connection[i][j]); 
    } 
    } 
    trace(connection); 
} 

} }