2015-05-11 12 views
5

Modifica: ha eseguito il codice su un computer più potente e la griglia è stata renderizzata correttamente. Possibile limitazione hardware? Computer in cui si è verificato il problema è stato un Chromebook Samsung serie 3. Penso che abbia a che fare con il tentativo di disegnare troppe linee allo stesso tempo. Testerà più tardi.HTML5 Canvas non traccia le righe oltre il 2040 in entrambe le direzioni

Sto provando a disegnare una griglia su una tela utilizzando il metodo lineTo(). Le linee si disegnano correttamente all'inizio, ma qualsiasi linea disegnata completamente oltre i 2048 pixel verso il basso o verso destra non viene visualizzata. La linea che va da questo punto al passato appare ancora dall'altra parte, solo le linee che sono solo disegnate oltre il punto non vengono visualizzate.

Ecco la mia JavaScript:

function drawGrid() { 
     //data.tiles is the map stored as an array of arrays 
     //tilesize = 60 

     var bw = data.tiles[0].length * tilesize; 
     var bh = data.tiles.length * tilesize; 

     ctx.beginPath(); 

     for (i = bw; i >= 0; i -= tilesize) { 
      ctx.moveTo(i, 0); 
      ctx.lineTo(i, bh); 
     } 
     for (i = bh; i >= 0; i -= tilesize) { 
      ctx.moveTo(0, i); 
      ctx.lineTo(bw,i); 
     } 

     ctx.strokeStyle = "black"; 
     ctx.stroke(); 
    } 

Ho controllato i data.tiles variabili, e sta leggendo il numero giusto. Davvero non ho idea di cosa ho incasinato qui.

+0

Sei sicuro che questo non ha a che fare con il modo in cui stai visualizzando la tela? – Imashcha

+0

Sì, riesco a vedere le immagini visualizzate oltre quel punto, solo non le linee. –

+1

Ho la sensazione che il limite esatto sia probabilmente 2048 (2^11), non 2040. – duskwuff

risposta

3

HTML Canvas ha un'area di rendering massima in base all'hardware del tuo browser &.

una volta superato questi limiti, il tuo lavoro è stato più che soddisfacente.

provare pre-rendering o utilizzare più canvas 'posizionato con CSS.

+0

È possibile che drawImage() possa avere un raggio maggiore? Perché ci sono immagini che superano il segno del 2048, ma non tutte le linee che esistono solo oltre quell'intervallo. –

+0

sì, le immagini su una tela sono come immagini in qualsiasi altro punto in cui un file di riferimento viene tirato. dove le linee vengono disegnate dal motore in quel momento, quindi richiede molta più potenza di elaborazione e avrà confidenza più stringente all'interno della tela. – DCdaz

+0

questo sarà probabilmente meglio per spiegare quanto può essere tesa una tela html5 rispetto a me http://blog.toggl.com/2013/05/6-performance-tips-for-html-canvas-and-createjs/ – DCdaz

1

Se è possibile vedere le immagini disegnate oltre il 2048, non c'è motivo per cui una linea non venga disegnata.

Nel codice si calcolano bw e bh in diversi modi. Potresti controllare se questo è un problema. In caso contrario, avremo bisogno di vedere più codice.

// bw uses data.tiles[0] 

var bw = data.tiles[0].length * tilesize; 

// bh uses data.tiles with no subscript 

var bh = data.tiles.length * tilesize;