2012年02月19日
川俣晶の縁側ソフトウェア技術雑記total 7677 count

CANVAS要素で描画されない罠

Written By: 川俣 晶連絡先

 HTML5と心中する覚悟はできたので、CANVAS要素も使い始めました。(別に使い始めたのは今日というわけではありませんけど)

 いきなり、はまりましたねえ。

問題ない段階 §

 CANVAS要素dareaを書き込んで、マウスのイベントハンドラにこう書くわけです。

var context = document.getElementById('darea').getContext('2d');

context.fillRect(5, 5, 10, 10);

 ちゃんと指定した範囲が黒くなりますね。見事、ぱちぱち。

問題が起きる段階 §

 最初にグレーで塗り潰して初期化するザンスよ~というわけで、背景を最初にグレーで塗るわけです。

var darea = document.getElementById('darea');

var context = darea.getContext('2d');

context.fillStyle = "rgb(230,230,230)";

context.fillRect(0, 0, darea.width, darea.height);

 はい、これでNGです。

 このコードを入れた結果、背景はグレイになりますが、最初のコードで黒く塗られなくなります。

原因 §

 getContextメソッドで取得されるオブジェクトが同じようですね。だから、初期化時に設定されたグレイがそのまま残っていて、新規にコンテキストを取得しても色指定がグレイのまま。だから、fillRectは背景に塗ったグレイと同じグレイで描画するので何も描画していないように見えます。

対策 §

var context = document.getElementById('darea').getContext('2d');

context.fillStyle = "Black";

context.fillRect(5, 5, 10, 10);

 これでいいみたいですね。

感想 §

 コンテキスト依存度が強いわけで、実行される経路次第で発覚するバグが簡単に出そう。描画に関係するコンテキスト情報はいちいち全て設定する方が安全かも。トラブルメーカーCANVAS君と呼ぼうか。

 まあ、それでも他に無いからつかわにゃらんのですけどね。

 もちろん、CANVAS君だけがトラブルメーカーではありませんけどね!

Facebook

キーワード【 川俣晶の縁側ソフトウェア技術雑記
【技術雑記】の次のコンテンツ
2012年
02月
26日
AzureではWeb.configの<filter type="" />が鬼門なのか?
3days 0 count
total 3618 count
【技術雑記】の前のコンテンツ
2012年
02月
16日
Ctrl-Cを押すまでコンソールアプリを終了させない方法
3days 0 count
total 6783 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

https://mag.autumn.org/tb.aspx/20120219155840
サイトの表紙【技術雑記】の表紙【技術雑記】のコンテンツ全リスト 【技術雑記】の入手全リスト 【技術雑記】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.