2014-08-27 3 views
1

그래서 저는 캔버스에서 그림을 그리기 위해 잠시 동안 작업 해 왔습니다. 캔버스 전체에 KineticJS 라이브러리를 사용하고 있지만 문제가되지 않는다고 생각합니다. 프로젝트의 한 부분은 요소를 연결하기 위해 선을 그려야하고, 때로는이 선들이 서로에 대해 그려지므로 다른면을 다루기 때문에 여기에 문제가 발생합니다. 단지 문제를 다루는 것이 아니라 두껍고 두껍게 만듭니다. 차이를 실제로 볼 수 있습니다.서로 그린 선은 HTML5 캔버스에서 두껍고 두껍게 만듭니다.

누구든지 동일한 문제를 만났 으면 저를 도울 수 있습니까? :) 그것은 정상적인 행동입니까? 사용 중지 할 수 있습니까? 라인의 ..

그림을 이미 그린 라인 계산하고 여기에 옵션이 정말없는 전에 그려진 경우 확인하기 때문에 :

http://i62.tinypic.com/2dubeyp.png

(상단에 두 번만 그려집니다 하지만 바닥에 두 사람은 여러 번 그려집니다.

사전에 감사!

EDIT 1

그래서 여기에이 선을 그리는 코드 부분이 있습니다.

var stage = new Kinetic.Stage({ 
    container: _this.containerId, 
    width: _this.options.fitWindow?window.innerWidth:0, 
    height: _this.options.fitWindow?window.innerHeight-5-61:0, 
    draggable: true, 
    dragDistance: 10 
}); 

var layer = new Kinetic.Layer();  
stage.add(layer); 

var conns = new Kinetic.Group(), 
    points = [0,10,100,10]; 

conns.add(new Kinetic.Line({ 
    points: points, 
    strokeWidth: 1, 
    stroke: '#db9e36', 
    listening: false 
})); 

conns.add(new Kinetic.Line({ 
    points: points, 
    strokeWidth: 1, 
    stroke: '#db9e36', 
    listening: false 
})); 

layer.add(conns); 
stage.draw(); 
+1

이러한 키네틱 라인은 무엇입니까? 나는 당신의 묘사가 일반적으로 일반 html 캔버스에서 발생하기 때문에 물어 본다. 정규 캔버스에서 새로운 그리기 명령은'context.beginPath()'로 시작해야합니다. 그렇지 않으면 이전의 모든 도면이 다시 그려지고 따라서 더 두껍고 두꺼운 것처럼 보입니다. 그들이 Kinetic 일 경우 .Line 's 그러면 우리는 당신을 돕기 위해 당신의 코드가 필요합니다. – markE

+0

예, 물론 그들은 'Kinetic.Line'입니다. 좋아요. 게시물을 편집하고 코드를 확장 해 보겠습니다. – psychoo118

답변

0

동일한 포인트 변수를 사용하여 2 줄을 만듭니다.

// one set of points 
points = [0,10,100,10]; 

이렇게하면 두 줄이 같은 위치에 그려집니다.

따라서 두꺼운 선은 실제로 여러 선을 서로 위에 그립니다.

// first line using points variable 
conns.add(new Kinetic.Line({ 
    points: points, 
    strokeWidth: 1, 
    stroke: '#db9e36', 
    listening: false 
})); 

// second line using the same points variable 
// this causes your 2 identical lines to be drawn--resulting in 1 thicker line 
conns.add(new Kinetic.Line({ 
    points: points, 
    strokeWidth: 1, 
    stroke: '#db9e36', 
    listening: false 
})); 
+0

좋아요,이 코드를 완전히 지우겠습니다. 필수적인 부분 만 복사했습니다. 일반적으로 Element라는 클래스가 있는데,이 라인을 그려서 (레이어를 계산하고 레이어에 추가합니다.) 요소 배열을 통과하여 처리하는 foreach가 있습니다. 모든 Element 객체에는 점 배열이 있으며 때로는 그 값이 동일합니다 (일부 계산에 따라 다름). 내 문제를 이해하길 바래. – psychoo118

+0

귀하의 디자인에 문제가 있습니다. 2 Kinetic.Line이 겹치면 캔버스에 두 번 그려지기 때문에 두껍게 보입니다. 아마도 여러분은 모든 라인에 대해'points' 배열을 비교할 수도 있고, 2+가 정확히 겹치면'duplicateLine.hide()'를 사용하여 유일 라인 하나만 보여줄 수 있습니다. – markE

+0

글쎄 그건 내가 쓴 것인데, 실제로는 옵션이 아니다. 왜냐하면 실제 코드에서는 단순히 선이 아니기 때문에 3-4 줄 바꿈이 있기 때문에 렌더링 모드를 변경하는 것이 가능할 수도 있습니다. / – psychoo118

관련 문제