HTML5의 canvas를 이용해서 마구 그리는데 역시나 작은 객체가 많고 프레임이 높아지면 번쩍번쩍한다.

그리하여 더블 버퍼링을 찾아보니까 역시나 동일함.


canvas를 view용, buffer용으로 2개 만들어서 

buffer용 canvas에 자잘한 거 전부 그리고 막판에 실제로 보여질 view용 canvas에 한번에 그려버리면 OK.


<script>

document.onload = function(){

    // view용 canvas

    var cnvsView = document.getElementById('cnvs_view');

    var ctxView = cnvsView.getContext('2d');

    // buffer용 canvas

    var cnvsBuffer = document.createElement('canvas');

    var ctxBuffer = cnvsBuffer.getContext('2d');

    ctxBuffer.canvas.width = cnvsView.width;

    ctxBuffer.canvas.height = cnvsView.height;


    // 더블 버퍼링

    // 1. buffer용 canvas에 그리기

    var img = new Image();

    img.src = 'http://이미지파일경로';

    ctxBuffer.drawImage(img, 0, 0);

    // 그 외 자잘한 뭔가를 한다고 가정....

    // 원래는 타이머 등으로 프레임을 정해서 마구 그리는 정도는 되어야 번쩍거림...


    // 2. view용 canvas에 그리기

    ctxView.drawImage(cnvsBuffer, 0, 0);

}

</script>

</head>


<body>

<canvas id="cnvs_view" width="640" height="480"></canvas>

</body>

</html>


Posted by bloodguy
,