ドラゴンレーダー風ナビ ~デザイン編~(2/4)

お絵描きには「CreateJS」を使うぞ!

ネイティブなJavaScriptとHTML5でごりごりお絵描きをしてもいいのですが、より効率良くコーディングするために、「CreateJS」ライブラリを使います。

このライブラリは、FlashのActionScriptライクにJavaScriptのコーディングができる優れもの。
Flashと言えば、多彩なアニメーションを実装できる私も大好きなツールでしたが、Flash本体が消滅しかかっている今、CreateJSはFlashらしい体験ができる貴重なライブラリと言えるでしょう。
お絵描きをするだけなら、このライブラリの必要性をそこまで感じないかもしれませんが、この後アニメーション効果で動きをつけていく時に、その本領を発揮しますよ!

さて、CreateJSを使うための前準備。
CreateJSのJSファイルを読み込んでおきます。
<script src="https://code.createjs.com/createjs-2015.11.26.min.js"></script> 
もう一つの準備。
お絵描きする土台となる「Canvas」タグを設置しましょう。
読んで字のごとく、お絵描きキャンバス。
このCanvasタグは、HTML5の目玉です。HTMLの可能性が大きく広がった!
<canvas id="myCanvas" width="260" height="300"></canvas> 

Canvasに直線を描く

<script type="text/javascript">
// 画面ロード時にサンプル関数を呼び出します
window.addEventListener("load", sample1);

// サンプル1(直線を描画)
function sample1() {
  // Stageオブジェクトを作成します
  var stage = new createjs.Stage("myCanvas");
  
  // Shapeオブジェクトを作成して、直線を引きます
  var shape = new createjs.Shape();
  shape.graphics.beginStroke("red");
  shape.graphics.setStrokeStyle(3);
  shape.graphics.moveTo(100, 60);
  shape.graphics.lineTo(110, 35);
  shape.graphics.lineTo(150, 35);
  shape.graphics.lineTo(160, 60);
  shape.graphics.endStroke();
  
  // Stageに追加します
  stage.addChild(shape);
  // Stageの描画を更新します
  stage.update();
}
</script>
beginStroke()メソッドで線の色を指定して描画を開始し、endStroke()メソッドで描画を終了します。
(※endStroke()メソッドは省略可能。書いたほうがお行儀がいいですが、普段は書かないです。)
setStrokeStyle()メソッドで線の太さを指定します。

moveTo()メソッドで描画の開始位置を指定、lineTo()メソッドで次の描画位置を指定して、直線を描画します。
ネイティブなJavaScriptとの違いは、StageにShapeを追加していく、というところでしょうか。この辺りがFlashのActionScriptと同じ実装となっています。
(ネイティブなJavaScriptの場合は、Canvasのコンテキストに描画パスを引く、という手順になります。言葉にすると難しいですが、やっていることは同じです。)

Canvasに四角形を描く

<script type="text/javascript">
// 画面ロード時にサンプル関数を呼び出します
window.addEventListener("load", sample2);

// サンプル2(四角形を描画)
function sample2() {
  // Stageオブジェクトを作成します
  var stage = new createjs.Stage("myCanvas");
  
  // Shapeオブジェクトを作成して、四角形を描きます
  var shape = new createjs.Shape();
  shape.graphics.beginStroke("red");
  shape.graphics.beginFill("pink");
  shape.graphics.setStrokeStyle(2);
  shape.graphics.drawRect(115, 30, 30, 5);
  
  // Stageに追加します
  stage.addChild(shape);
  // Stageの描画を更新します
  stage.update();
}
</script>
drawRect()メソッドで、4点を指定して四角形を描画します。
四角形のようなパスが閉じた図形は、beginFill()メソッドで、色を塗ることができます。

Canvasに円を描く

<script type="text/javascript">
// 画面ロード時にサンプル関数を呼び出します
window.addEventListener("load", sample3);

// サンプル3(円を描画)
function sample3() {
  // Stageオブジェクトを作成します
  var stage = new createjs.Stage("myCanvas");
  
  // Shapeオブジェクトを作成して、円を描きます
  // 1つ目の円(塗りつぶしなし)
  var shape1 = new createjs.Shape();
  shape1.graphics.beginStroke("blue");
  shape1.graphics.setStrokeStyle(1);
  shape1.graphics.drawCircle(130, 170, 105);
  stage.addChild(shape1);
  // 2つ目の円(グラデーションで塗りつぶし)
  var shape2 = new createjs.Shape();
  shape2.graphics.beginStroke("red");
  shape2.graphics.setStrokeStyle(1);
  shape2.graphics.beginLinearGradientFill(["#ff69b4","#ff1493"], [0.1,1.0], 130, 70, 180, 270);
  shape2.graphics.drawCircle(130, 170, 100);
  stage.addChild(shape2);
  
  // Stageの描画を更新します
  stage.update();
}
</script>
drawCircle()メソッドで、中心座標と半径を指定して、円を描画します。

beginLinearGradientFill()メソッドで、グラデーションを使った塗りつぶしができます。
beginFill()メソッドと同様で、パスの閉じた図形ならば使用可能です。

Canvasに円弧を描く

<script type="text/javascript">
// 画面ロード時にサンプル関数を呼び出します
window.addEventListener("load", sample4);

// サンプル4(円弧を描画)
function sample4() {
  // Stageオブジェクトを作成します
  var stage = new createjs.Stage("myCanvas");
  
  // Shapeオブジェクトを作成して、円弧を描きます
  // 1つ目の円弧(時計回り)
  var shape1 = new createjs.Shape();
  shape1.graphics.beginStroke("blue");
  shape1.graphics.setStrokeStyle(3);
  shape1.graphics.arc(130, 170, 115, Math.PI*1.58, Math.PI*1.42, false);
  stage.addChild(shape1);
  // 2つ目の円弧(反時計回り)
  var shape2 = new createjs.Shape();
  shape2.graphics.beginStroke("red");
  shape2.graphics.setStrokeStyle(2);
  shape2.graphics.arc(130, 30, 22, 0, Math.PI, true);
  stage.addChild(shape2);
  
  // Stageの描画を更新します
  stage.update();
}
</script>
円弧(閉じられていない円)の場合、少しだけややこしくなります。
act()メソッドで、中心座標、半径、開始位置角度(ラジアン)、終了位置角度(ラジアン)、時計回りか反時計回りか、を指定して円弧を描画します。
角度をラジアンで指定するところが、若干難しく感じますね。

ラジアン(弧度)

弧の長さが半径と等しくなる角度を1とする角度の単位のこと。
単位記号は「rad」。ラジアンで角度を表すことを弧度法という。
  • 0°     = 0 rad
  • 90°   = 0.5 π rad
  • 180° = 1 π rad
  • 270° = 1.5 π rad
  • 360° = 2 π rad
※π:円周率(3.141592…)

あなたへのおすすめ記事