Unerwünschte Zeilen, die in html5-Canvas mit Kacheln erscheinen

8

Ich zeichne eine Karte auf einer Leinwand mit Quadraten 40px * 40px. Alles ist gut, bis ich die Karte durch Verschieben der Leinwand (mit Hilfe der Transformation) durchblättere. Dann, aus dem Nichts, Linien zwischen den Fliesen. Siehe Bilder unten.

Warum?

    
Pedro 30.03.2012, 11:39
quelle

1 Antwort

15

Dies sieht aus wie Gleitpunktpositionierung (z. B. Sie haben einen Bildlauf bis 100.5, 100.5) kombiniert mit bilinearer Filterung, die die meisten Browser verwenden, um Bilder auf der 2D-Leinwand anzuzeigen.

Grundsätzlich, wenn Sie Image () ein Bild zwischen Pixeln zeichnen, wird jedes Pixel über zwei Pixel geglättet, was bedeutet, dass die Kanten bei 50% Alpha über den Hintergrund gezeichnet werden. Dies unterbricht die Aufteilung, da die Kante der nächsten Fliese die gleiche ist und 50% Alpha über die 50% Alpha der anderen Fliese zieht, was 75% Alpha ergibt. Dies erscheint heller oder dunkler (abhängig von der Hintergrundfarbe) als der Rest der Kachel. So erhalten Sie "Nähte" entlang der Kanten der Fliesen.

Um zu beheben: Math.round () Ihr Bild koordiniert, sowie alle Anrufe zu übersetzen () (seit der Übersetzung um ein halbes Pixel hat den gleichen Effekt). Dies garantiert, dass alles in ein pixelorientiertes Raster gezeichnet wird und nie zusammenkommt.

    
AshleysBrain 30.03.2012, 12:22
quelle