Createjs學習筆記1-簡介與簡單使用

来源:https://www.cnblogs.com/ronnyzhao/archive/2018/01/23/8337225.html
-Advertisement-
Play Games

CreateJS介紹請看CreateJS中文網或者官方網站 一.使用EaselJS 先到官網下載easeljs,也可以點這裡 1.得到easeljs-0.8.1.min.js後,新建一個HTML5文件並導入: 2.入口函數和創建canvas標簽: 3.創建舞臺: 二.使用EaselJS創建圖形和文字 ...


CreateJS介紹請看CreateJS中文網或者官方網站

一.使用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>

 

說明:本篇文章只是個人學習筆記,原創文章在這裡

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 簡介 前面寫了一篇文章講解了position常用的幾個屬性:《CSS 屬性之 position講解》一般都知道下麵幾個常用的: 在https://developer.mozilla.org/zh-CN/docs/Web/CSS/position還說了下麵這三個值: 估計大部分都沒有用過positio ...
  • 1:字元串 JS中的任何數據類型都可以當作對象來看。所以string既是基本數據類型,又是對象。 2:聲明字元串 var sStr = ‘字元串’; var oStr = new String(‘字元串’); 3:字元串屬性 1.length 計算字元串的長度(不區分中英文)。 2.construc ...
  • 模塊載入過程: 路徑分析 文件定位 模塊編譯 Node對引入過的模塊都會進行緩存,以減少二次引入時的開銷。緩存的是編譯和執行之後的對象。require時對緩存中的模塊是第一優先順序的 路徑分析 模塊標識符:require的參數,按書寫形式可以分成以下幾類: 核心模塊:如http,fs,path 文件模 ...
  • 轉載請註明出處: "Generator函數非同步應用" 上一篇文章詳細的介紹了Generator函數的語法,這篇文章來說一下如何使用Generator函數來實現非同步編程。 或許用Generator函數來實現非同步會很少見,因為ECMAScript 2016的async函數對Generator函數的流程式控制 ...
  • 介紹HTTP緩存之前先簡單說一下Web緩存 Web緩存是一種保存Web資源副本併在下次請求時直接使用該副本的技術。        Web緩存可以分為這幾種:瀏覽器緩存、CDN緩存、伺服器緩存、資料庫數據緩存 。因為可能會直接使用副 ...
  • 本文設計到常見對文檔的處理樣式,和塊,行標簽的特點。 沒用什麼重要內容,只是自己的一些知識點的回憶,對以前知識的一個梳理過程,望某懶蟲加油!!! ...
  • classList屬性的方法:add();remove();toggle(); 描述,在一些頁面我們需要使用兩個按鈕來回切換,如圖: 我們要使用到add()和remove()方法 html部分: <div class="login-title"> <a href="javascript:void(0 ...
  • 2017年npm上最熱門的項目之一——Pkg,可以直接將node.js項目打包成windows可以直接執行的exe文件(也支持FreeBSD、linux、macos、arm系統),並且無須修改你項目中的任何代碼。本文對該項目作了簡要說明與教程,並提供了一個簡單示例來說明其使用場景。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...