2016-02-09 1 views
0

При тестировании производительности мой код рисования занимает большую часть обработки. Я называю это каждый кадр, когда мне нужно рисовать.Более совершенный код рисования холста?

BoardDisplay.prototype.drawCursor = function (client, context, vx, vy) { 
    context.beginPath(); 
    var size = 25; 
    context.arc(vx, vy, 0.5 * size, 0, 2 * Math.PI, false); 
    var colors = ["white", "red", "blue", "green", "purple"]; 
    context.fillStyle = colors[this.marble]; 
    context.fill(); 
    context.closePath(); 

    context.beginPath(); 
    var cursorRadius = 5; 
    context.moveTo(vx - cursorRadius, vy); 
    context.lineTo(vx + cursorRadius, vy); 
    context.moveTo(vx, vy - cursorRadius); 
    context.lineTo(vx, vy + cursorRadius); 
    context.strokeStyle = "black"; 
    context.stroke(); 
    context.closePath(); 
}; 

Я мог бы извлечь эти константы в значения на прототипе. Есть ли другой способ сделать это более результативным?

Я понимаю, что React.js обновляет только «по мере необходимости», но я рисую холст здесь, а не divs. Указатели оценили.

+0

Как часто вы перерисовываете свой холст? Если вы делаете это в цикле, можете ли вы добавить свой код цикла? – zero298

ответ

0

Общие решения:

  • Вы уверены, что хотите использовать холст (вместо SVG, WebGL, формирования изображения сервера, ...)?
  • уменьшить размер холста, если это возможно (меньше пикселей = меньше работы)
  • ручка «дифференциалов» себя на холсте
  • использование иерархического

Для получения более подробной информации см эту прекрасную статью: http://www.html5rocks.com/en/tutorials/canvas/performance/

+0

Я снизил частоту кадров, так как не нуждается в быстрых обновлениях, что помогает. Размер должен быть таким большим, как есть. Я не знаком с другими, я проверю эту статью! – quantumpotato

+0

Для игр подумайте о том, как использовать lib, например pixi или фреймворк, например phaserio, ... –

+0

Вы можете также удвоить размер розыгрыша (большие пиксели, но намного быстрее). Большинство старых игр делают это. Например, 320x240, но показывайте его как 640x480. –