2012-03-30 8 views
8

私は40px * 40pxの正方形を使ってキャンバス上に地図を描画しています。 キャンバスをオフセット(変換を使用)してマップをスクロールするまで、すべてがうまくいきます。そして、どこかで、タイルの間に線が現れます。下の画像を参照してください。タイルを使用してhtml5キャンバスに表示されない不要な線

なぜですか?これは、浮動小数点の位置のように見えます

Canvas drawn, but no offset yet. All is fineCanvas drawn w offset, now where did those lines come from?

+0

あなたのコードの一部が役に立つでしょう –

答えて

15

はバイリニアはほとんどのブラウザは、2Dキャンバスに画像を表示するために使用するフィルタリングと組み合わせて(例えば、あなたは100.5、100.5にスクロールしました)。

基本的に、ピクセル間に画像を描画すると、すべてのピクセルが2つのピクセルにわたってスムージングされます。つまり、エッジは背景に対して50%のアルファで描画されます。これは、次のタイルのエッジが同じであるためタイル張りを破り、50%のアルファを他のタイルの50%のアルファに描画します。これにより最大75%のアルファが追加されます。タイルの残りの部分よりも明るくまたは暗く(背景色に応じて)表示されます。だから、あなたはタイルの端に沿って "縫い目"を取得します。

Math.round()の画像座標と、translate()への呼び出し(半画素の平行移動は同じ効果があるため)を修正します。これにより、すべてがピクセルで整列されたグリッドに描画され、継ぎ目がないことが保証されます。

+0

はい、私は実際にこの1つを見つけました - あなたの答えは上です。整数以外のものをキャンバスをオフセットするために使用すると、これらの行が表示されます。だから私は単純にMath.floor(offsetX)を使って問題を解決しました。 – Pedro

+0

数学も私の問題を解決しました。ライフセーバー!ありがとう! – masnun

関連する問題