一.使用EaselJS
先到官网下载easeljs,也可以点这里

1.得到easeljs-0.8.1.min.js后,新建一个HTML5文件并导入:

<script src="easeljs-0.8.1.min.js"></script> 

2.入口函数和创建canvas标签:

<body onload="init();">
    <canvas id="game" width="1000" height="700" style="background-color: white"></canvas>
</body>

3.创建舞台:

 <script>
    function init(){
        var stage = new createjs.Stage("game");
        //.......
        stage.update();

    }
</script>

二.使用EaselJS创建图形和文字
1.添加文字

var txt = new createjs.Text("HELLO","20px Times","#000");
txt.x = 100;  
txt.y = 100;  
txt.text = "hello, world!" ;

这里先创建了文字,然后又在创建后修改了文字位置,以及内容。
最后一定要把新创建的文字加入到舞台中,不然无法显示:

stage.addChild(txt); 

2.添加图形
图形包括代码绘制的适量图(如一个圆,一个矩形)和png、jpg等格式的图片
这里先说代码绘制的适量图,图片后面再学习:

var shape = new createjs.Shape();
shape.graphics.beginStroke("#000").beginFill("#ff0000").drawRect(0, 0, 100, 100);

可以查看API修改shape的位置、大小、透明度、旋转、锚点等属性。

三.容器Container
Container是一个容器,可以包含Text、Bitmap、Shape、Sprite等其他的EaselJS元素,包含在一个Container中方便统一管理,比如你要做一个按钮,按钮图形和上面的提示文字包含在一个Container中,可以统一移动或者显示隐藏,比如:

var button = new createjs.Container();  

//创建一个文本
var label = new createjs.Text("OK","20px Times","#000");  
label.textAlign = 'center';  
label.textBaseline = 'middle'; 

//创建一个适量圆
var shape = new createjs.Shape(); shape.graphics.beginFill("#ff0000").drawCircle(0, 0, 50);  
shape.shadow =  new createjs.Shadow("#000",5,5,8); 

//将圆和文本添加到button容器。这里一定要先添加shape,画布渲染顺序原因,先文本的话,圆在上层,文本就会被遮住
button.addChild(shape,label); 
button.x = 100;

stage.addChild(button); 

按照上面的代码可以创建了一个按钮,我们设置了button.x = 100,发现圆和文字同时向右移动了100,这就是Container的好处。
下面我们添加一些简单功能:
如果想让鼠标经过时显示一个小手的形状我们可以这样:

button.cursor = "pointer"; 
//这句代码不添加的话,上面的事件是不会生效的
stage.enableMouseOver();

四.添加事件监听和Ticker
想要与stage中的元素交互只需要给他们添加addEventListener,例如点击,鼠标划过等等,而对于stage本身,有个特别的事件"tick",给stage设置tick相当于javascript中的SetInterval,定时的运行一个函数,可以用来定时的刷新stage,即运行stage.update()。一个比较常用的方法也是一个最简单的游戏框架一般都是这样:

<script>
    var stage;
    function init(){
        stage = new createjs.Stage('game');
        stage.enableMouseOver();
        //setFPS方法已过时
        //createjs.Ticker.setFPS(60);
        createjs.Ticker.addEventListener('tick',update);
    }

    function update(event){
        stage.update();
    }
</script>

假如我们要监听前面创建button的点击事件,这样做就可以了:

button.addEventListener("click",function(e){  
    alert("ok");  
});

还可以添加鼠标滑过等事件监听,(这里使用on方法添加,on方法是addEventListener的一个简单的形式):

button.on("mouseover",function(e){              
       button.alpha = 0.5;  
});  
button.on("mouseout",function(e){
       button.alpha = 1;  
});  

五.应用:做一个简单的画板工具

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/easeljs.js"></script>
    <style>
        *{margin: 0;padding: 0;}
        html,body{width: 100%;height: 100%;}
        #myCanvas{background: #1d292c;}
    </style>
</head>
<body onload="init()">
    <canvas id="myCanvas"></canvas>
    <script>
        var canvas = document.getElementById("myCanvas");
        var stage = new createjs.Stage(canvas);
        var drawingCanvas,oldPt,oldMidPt,title,color,stroke,colors,index;
        var vw,vh;
        function init() {
            canvasChange();
            index = 0;
            colors = ["#828b20", "#b0ac31", "#cbc53d", "#fad779", "#f9e4ad", "#faf2db", "#563512", "#9b4a0b", "#d36600", "#fe8a00", "#f9a71f"];

            stage.autoClear = false;
            stage.enableDOMEvents(true);

            createjs.Touch.enable(stage); //允许触控

            drawingCanvas = new createjs.Shape();

            stage.addEventListener("stagemousedown", handleMouseDown);
            stage.addEventListener("stagemouseup", handleMouseUp);

            title = new createjs.Text("Click and Drag to draw", "36px Arial", "#777777");
            title.x = 300;
            title.y = 200;
            stage.addChild(title);

            stage.addChild(drawingCanvas);
            stage.update();
        }
        function update(e) {
            stage.update();
        }

        function canvasChange() {
            vw = document.body.clientWidth;
            vh = document.body.clientHeight;
            canvas.width = vw;
            canvas.height = vh;
            stage.update();

        }

        function handleMouseDown(event) {
            if (!event.primary) { return; }
            if (stage.contains(title)) {
                stage.clear();
                stage.removeChild(title);
            }
            color = colors[(index++) % colors.length];
            stroke = Math.random() * 30 + 10 | 0;
            oldPt = new createjs.Point(stage.mouseX, stage.mouseY);
            oldMidPt = oldPt.clone();
            stage.addEventListener("stagemousemove", handleMouseMove);
        }

        function handleMouseMove(event) {
            if (!event.primary) { return; }
            var midPt = new createjs.Point(oldPt.x + stage.mouseX >> 1, oldPt.y + stage.mouseY >> 1);

            drawingCanvas.graphics.clear().setStrokeStyle(stroke, 'round', 'round').beginStroke(color).moveTo(midPt.x, midPt.y).curveTo(oldPt.x, oldPt.y, oldMidPt.x, oldMidPt.y);

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

            oldMidPt.x = midPt.x;
            oldMidPt.y = midPt.y;

            stage.update();
        }

        function handleMouseUp(event) {
            if (!event.primary) { return; }
            stage.removeEventListener("stagemousemove", handleMouseMove);
        }
    </script>
</body>
</html>

标签: none

评论已关闭