LoginSignup
6
11

More than 5 years have passed since last update.

CreateJSの簡単なメモ

Posted at

今って、描画ライブラリって何がいいんでしょ。
CreateJSをいじらなければいけない機会があったので最低限のノウハウをメモしておきます。

こちらが大変参考になりました。

CreateJSって、最新版が2015/11/26なんですね。もう下火なんでしょうかね???

基本編

では簡単に使い方を見ていきます。

テンプレートとShapeの描画

いちおう、下記を基本のテンプレートとして利用してみます。
jQueryは特に使いませんが、共存に問題が無い確認するためにロードしています。

<!doctype html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<!-- canvas -->
<canvas id="myCanvas" width="640" height="480"></canvas>
<!-- js -->
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://code.createjs.com/createjs-2015.11.26.min.js"></script>
<script>
$(function(){

    //stage
    var stage = new createjs.Stage("myCanvas");

    //shape
    var shape = new createjs.Shape();
    shape.graphics.beginFill("Red");
    shape.graphics.drawCircle(0,0,100);
    shape.x = 100;
    shape.y = 100;

    //stageに追加
    stage.addChild(shape);

    //stageに追加
    stage.addChild(shape);

    //text

    //image

    //sstage.update
    stage.update();

});
</script>
</body>
</html>

ここではcreatejs.Shape()を利用しましたが、createjs.Graphics()の方がよりプリミティグのようです。

常にStageを更新する

    //sstage.update
    // stage.update();

    createjs.Ticker.timingMode = createjs.Ticker.RAF;
    createjs.Ticker.addEventListener("tick",function(){
        stage.update();
    });

Textの描画

    //text
    var txt = new createjs.Text("Hello World","24px serif","Black");
    stage.addChild(txt);

画像の描画

    //image
    var bmp = new createjs.Bitmap("assets/blue.jpg");
    stage.addChild(bmp);

なお、単にstage.update()するだけではタイミングにより画像が描画されないことがあります(読み込み終了前に、全体が描画されてしまうため等)。そのために"tick"を設定して、常に描画が更新されるようにしています。

イベントの設定

なお、イベント機能を利用するにはhttp://経由でアクセスする必要があるようです。

    //image
    var bmp = new createjs.Bitmap("assets/blue.jpg");
    bmp.addEventListener("click",function(){
        alert("クリックされた!");
    });
    stage.addChild(bmp);

なお、bmp.addEventListener()は、単にbmp.on()と書けるようです。

マウスの座標を取得する

    createjs.Ticker.timingMode = createjs.Ticker.RAF;
    createjs.Ticker.on("tick",function(){

        bmp.x = stage.mouseX;
        bmp.y = stage.mouseY;

        stage.update();
    });

応用編

ドラッグ&ドロップ

ドラッグ&ドロップを試してみたいと思います。

<!doctype html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<!-- canvas -->
<canvas id="myCanvas" width="640" height="480"></canvas>
<!-- js -->
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://code.createjs.com/createjs-2015.11.26.min.js"></script>
<script>
$(function(){

    var stage = new createjs.Stage("myCanvas");

    //ドラッグ開始座標
    var dragPointX;
    var dragPointY;

    //ボールを描画
    var ball = new createjs.Shape();
    ball.graphics.beginFill("Red").drawCircle(0,0,50);
    ball.x = stage.canvas.width/2;
    ball.y = stage.canvas.height/2;
    stage.addChild(ball);

    //イベント設定
    ball.on("mousedown", handleDown);
    ball.on("pressmove", handleMove);
    ball.on("pressup", handleUp);

    //down
    function handleDown(event){

        //drag start x,y
        dragPointX = stage.mouseX - ball.x;
        dragPointY = stage.mouseY - ball.y;

        ball.alpha = 0.5;
    }

    //move
    function handleMove(event){
        ball.x = stage.mouseX - dragPointX;
        ball.y = stage.mouseY - dragPointY;
    }

    //up
    function handleUp(event){
        ball.alpha = 1.0;
    }

    //update
    createjs.Ticker.on("tick",function(){
        stage.update();
    });

});
</script>
</body>
</html>

イベントが設定されたオブジェクトが重なっている場合、上位が優先される。上位にイベントが設定されていなければ、設定されたものが優先されるらしい。

Z-Indexを変更

    stage.setChildIndex(ball,1);
    console.log(stage.getChildIndex(ball));

実在するIndexじゃないと設定できないようです。無条件に+1000とかしてもダメ。

6
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
11