2014-09-02 4 views
0

고정 좌표 공간에서 작업합니다. {x:0, y:0, w:800, h:600}을 예로 들어 봅니다. 캔버스가 창 크기에 맞게 조절 된 다음 무대를 확대하고 다시 그립니다. 그런 다음 무대 내 배경 레이어를 중앙에 배치합니다. 전체 스테이지의 크기 조정을 사용하지 않으면 센터링이 잘 작동하지만 스테이지 크기를 설정할 때 계산 된 좌표가 화면에 표시된 것과 일치하지 않습니다.스케일링 된 스테이지의 센터링 레이어

무대 스케일링과 그 다음에 레이어를 배치하는 방법은 무엇입니까? http://jsfiddle.net/pronebird/ahqa9a3y/

+0

jsfiddle을 만들 수 있습니까? – lavrton

+0

@lavrton jsfiddle 링크로 게시물을 업데이트했습니다. 'stage.scale'의 주석 처리를 해제하여 스케일링이 어떻게 작동하는지 확인하십시오. 어쩌면 뭔가를 얻지 못할 수도 있지만 스케일링을 사용할 때 좌표가 캔버스 크기에 매핑 될 것으로 예상됩니다. – Andy

+0

@lavrton이 문제에 대한 의견이 있으십니까? 나는 마스터와 똑같은 문제를 조사했다. 내가 뭔가 잘못하고 있는거야? – Andy

답변

0

이 열쇠는 좌표 공간 stage.position과 함께 stage.scale 플러스 절대를 처리 할 수있는 트릭의 몇 가지를 사용하여 고정하는 것이 었습니다 :

// @param size window size {width, height} 
MyScene.prototype.scaleAndCenterScene = function (size) { 
    var hfactor = size.width/this.baseWidth; 
    var vfactor = size.height/this.baseHeight; 
    var factor = Math.min(hfactor, vfactor); 

    // resize stage 
    this.stage.setSize(size); 

    // scale stage 
    this.stage.setScale({ 
     x: factor, 
     y: factor 
    }); 

    // calculate center 
    var pos = { 
     x: (size.width - this.baseWidth) * 0.5, 
     y: (size.height - this.baseHeight) * 0.5 
    }; 
    // center layer 
    this.backgroundLayer.position(pos); 

    // redraw 
    this.stage.batchDraw(); 
}; 

JSFiddle는에서 확인할 수있다. 나는 이것에 블로그 포스트를 썼다 : https://coderwall.com/p/dy_dla.