Canvas
HTML5では新要素としてCanvas要素が追加されました。この要素はグラフィックを描画する領域を示すことができ、実際に描画するにはJavaScriptを用います。Canvasは自由度が高く、横スクロールシューティングゲーム(JS-WARS)や、3D空間を移動するゲーム(3D Walker)などに応用されていたりもします。
右の図をご覧になると分かる通り、Canvas描画されるグラフィックは、左上を(0, 0)とした座標系で描画されます。またこの図自体もCanvas要素を用いて描画されています。
図のソースコードは、下のボタンを押すと表示されます。
// 各変数の定義と値の代入
var origin_x = 40; // 原点
var origin_y = 40;
var graph_w = 260; // 各座標軸
var graph_h = 260;
var rect_x = 100; // 四角形の座標、大きさ
var rect_y = 100;
var rect_w = 100;
var rect_h = 100;
// 座標を囲む灰色の線の描画
cx.beginPath();
cx.strokeStyle = 'rgb(178, 178, 178)';
cx.moveTo(graph_w, origin_y);
cx.lineTo(graph_w, graph_h);
cx.lineTo(origin_x, graph_h);
cx.stroke();
// 緑色の四角形の描画
cx.beginPath();
cx.rect(rect_x, rect_y, rect_w, rect_h);
cx.fillStyle = "rgb(100, 230, 100)";
cx.fill();
// 各種スタイルの初期化
cx.strokeStyle = "rgb(0, 0, 0)";
cx.fillStyle = "rgb(0, 0, 0)";
cx.font = "bold 15px 'MS Pゴシック'";
cx.fillText("0", origin_x - 10, origin_y - 3);
// x軸の描画
cx.beginPath();
cx.moveTo(origin_x, origin_y);
cx.lineTo(graph_w, origin_y);
cx.lineTo(graph_w - 10, origin_y - 5);
cx.moveTo(graph_w, origin_y);
cx.lineTo(graph_w - 10, origin_y + 5);
cx.fillText("X", graph_w + 5, origin_y);
cx.stroke()
// y軸の描画
cx.beginPath();
cx.moveTo(origin_x, origin_y);
cx.lineTo(origin_x, graph_h);
cx.lineTo(origin_x + 5, graph_h - 10);
cx.moveTo(origin_x, graph_h);
cx.lineTo(origin_x - 5, graph_h - 10);
cx.fillText("Y", origin_x - 10, graph_h + 15);
cx.stroke();
// スタイルの初期化(青色)
cx.strokeStyle = "rgb(100, 100, 256)";
cx.fillStyle = "rgb(100, 100, 256)";
// 四角形のx座標を示す、青い線
cx.beginPath();
cx.moveTo(origin_x, rect_y);
cx.lineTo(rect_x, rect_y);
cx.lineTo(rect_x - 10, rect_y + 6);
cx.moveTo(rect_x, rect_y);
cx.lineTo(rect_x - 10, rect_y - 6);
cx.fillText("x", (rect_x - origin_x)/2 + origin_x, rect_y + 15);
cx.stroke();
// 四角形のy座標を示す、青い線
cx.beginPath();
cx.moveTo(rect_x, origin_y);
cx.lineTo(rect_x, rect_y);
cx.lineTo(rect_x + 5, rect_y - 10);
cx.moveTo(rect_x, rect_y);
cx.lineTo(rect_x - 5, rect_y - 10);
cx.fillText("y", rect_x + 10, (rect_y - origin_y)/2 + origin_y);
cx.stroke();
// スタイルの初期化(赤色)
cx.strokeStyle = "rgb(256, 100, 100)";
cx.fillStyle = "rgb(256, 100, 100)";
// 緑の四角形の横幅を示す、赤い線
cx.beginPath();
cx.moveTo(rect_x, rect_y);
cx.lineTo(rect_x + rect_w, rect_y);
cx.lineTo(rect_x + rect_w - 10, rect_y - 5);
cx.moveTo(rect_x + rect_w, rect_y);
cx.lineTo(rect_x + rect_w - 10, rect_y + 5);
cx.fillText("w", rect_w/2 + rect_x, rect_y - 5);
cx.stroke();
// 緑の四角形の縦幅を示す、赤い線
cx.beginPath();
cx.moveTo(rect_x, rect_y);
cx.lineTo(rect_x, rect_y + rect_h);
cx.lineTo(rect_x + 5, rect_y + rect_h - 10);
cx.moveTo(rect_x, rect_y + rect_h);
cx.lineTo(rect_x - 5, rect_y + rect_h - 10);
cx.fillText("h", rect_x - 15, rect_h/2 + rect_y);
cx.stroke();
注意事項
各ページではCanvas要素のDOMオブジェクトの取得及び、描画コンテキストを取得するコードは省略してあります。またonloadでの読み込みも省略してありますので、注意して下さい。JavaScriptに書き込むべきこれらのコードは以下の通りで、ここではcxという変数が描画コンテキストを表わします。
onload = function() {
draw();
};
function draw() {
// Canvas要素のDOMオブジェクトの取得
var canvas = document.getElementById("rect");
// 描画コンテキストの取得
var cx = canvas.getContext("2d");
// 四角形の描画
cx.beginPath();
cx.rect(10, 10, 50, 50);
cx.stroke();
}
また、これに対してHTMLソースにおけるCanvas要素は以下の通りになります。