<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                >[warning]## 制作動畫或小游戲——CreateJS基礎類 > * * * * * <div class = "post"> <div id="cnblogs_post_body" class="blogpost-body"><p>前面曾經記錄過Canvas的基礎知識《<span style="color: #3366ff;"><a href="http://www.cnblogs.com/strick/p/5310787.html" target="_blank"><span style="color: #3366ff;">讓自己也能使用Canvas</span></a></span>》,在實際使用中,用封裝好的庫效率會高點。</p> <p>使用成熟的庫還能對基礎知識有更深入的理解,CreateJS是基于HTML5開發的一套模塊化的庫和工具,有4個模塊,<span style="color: #3366ff;"><a href="https://github.com/CreateJS" target="_blank"><span style="color: #3366ff;">github地址在這里</span></a></span>。</p> <p>最近看到有個<span style="color: #3366ff;"><a href="http://www.createjs.cc/" target="_blank"><span style="color: #3366ff;">中文網</span></a></span>,很多API都翻譯了出來,不過就是翻譯的比較生硬。</p> <p>我參考了國外寫的一本書《<span style="color: #3366ff;"><a href="http://download.csdn.net/download/loneleaf1/9487928" target="_blank"><span style="color: #3366ff;">HTML5.Games.with.CreateJS</span></a></span>》,再根據自己的一些理解整理了一下這個庫的使用。</p> <p>下面所有的demo代碼都可以在<span style="color: #3366ff;"><a href="http://codepen.io/strick/pen/BKYdRP" target="_blank"><span style="color: #3366ff;">這里查看到</span></a></span>。</p> <p>&nbsp;</p> <h1>一、Stage</h1> <p><span style="color: #3366ff;"><a href="http://www.createjs.cc/easeljs/docs/classes/Stage.html" target="_blank"><span style="color: #3366ff;">Stage</span></a></span>(舞臺)就是展現圖形、執行動畫的地方,必須先創建Stage,然后才能做后續操作。</p> <p>有兩種方式的初始化:</p> <div class="cnblogs_code"> <pre>stage = <span style="color: #0000ff;">new</span> createjs.Stage(document.getElementById('canvas'<span style="color: #000000;">)); stage </span>= <span style="color: #0000ff;">new</span> createjs.Stage('canvas');<span style="color: #008000;">//</span><span style="color: #008000;">直接使用canvas的ID</span></pre> </div> <p>接下來就是添加圖形等布置操作,等到你布置好舞臺后,就需要調用&ldquo;update&rdquo;方法,展示新的舞臺內容。</p> <div class="cnblogs_code"> <pre>stage.update();</pre> </div> <p>&nbsp;</p> <h1>二、Ticker</h1> <p><span style="color: #3366ff;"><a href="http://www.createjs.cc/easeljs/docs/classes/Ticker.html" target="_blank"><span style="color: #3366ff;">Ticker</span></a></span>類是一個定時器,主要就是定時刷新舞臺,理想的幀速率是60FPS,在這個類中也可以手動的修改這個速度。</p> <div class="cnblogs_code"> <pre><span style="color: #0000ff;">var</span><span style="color: #000000;"> stage; </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> init() { stage </span>= <span style="color: #0000ff;">new</span> createjs.Stage('canvas');<span style="color: #008000;">//</span><span style="color: #008000;">直接使用canvas的ID</span> createjs.Ticker.addEventListener("tick"<span style="color: #000000;">, runGame); createjs.Ticker.setFPS(</span>60<span style="color: #000000;">); } </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> runGame(e) { stage.update(); }</span></pre> </div> <p>如果想控制&ldquo;runGame&rdquo;中的刷新,可以設置暫停。</p> <p>&ldquo;setPaused&rdquo;方法可以修改&ldquo;e&rdquo;中的&ldquo;<span style="color: #808080;">paused</span>&rdquo;屬性。</p> <div class="cnblogs_code"> <pre>createjs.Ticker.setPaused(<span style="color: #0000ff;">true</span><span style="color: #000000;">); </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> runGame(e) { </span><span style="color: #0000ff;">if</span>(!<span style="color: #000000;">e.paused) stage.update(); }</span></pre> </div> <p>&nbsp;</p> <h1>三、Graphics</h1> <p><span style="color: #008000;"><strong><span style="font-size: 16px;">1)初始化方式</span></strong></span></p> <p>接下來可以畫一些圖出來,<span style="color: #3366ff;"><a href="http://www.createjs.cc/easeljs/docs/classes/Graphics.html" target="_blank"><span style="color: #3366ff;">Graphics</span></a></span>類可以畫矢量圖(vector)或位圖(bitmap)。</p> <div class="cnblogs_code"> <pre><span style="color: #0000ff;">var</span> g = <span style="color: #0000ff;">new</span><span style="color: #000000;"> createjs.Graphics(); g.beginStroke(</span>'#000'<span style="color: #000000;">); g.beginFill(</span>'#FF6600'<span style="color: #000000;">); g.drawRect(</span>0,0,100,100);</pre> </div> <p>也可以鏈式的寫法。</p> <div class="cnblogs_code"> <pre><span style="color: #0000ff;">var</span> g = <span style="color: #0000ff;">new</span> createjs.Graphics().beginStroke('#000').beginFill('#FF6600').drawRect(0,0,100,100);</pre> </div> <p>Graphics類僅僅提供了畫圖,但并不會顯示,如果要顯示,就需要&ldquo;Shape&rdquo;類的幫忙。</p> <p>&nbsp;</p> <p><span style="color: #008000;"><strong><span style="font-size: 16px;">2)簡寫</span></strong></span></p> <p>Graphics類中的畫圖方法還有簡寫:</p> <p><img src="https://images2015.cnblogs.com/blog/211606/201604/211606-20160412154438301-791242895.jpg" alt="" data-pinit="registered" /></p> <p>&nbsp;</p> <h1>四、Shape</h1> <p><span style="color: #008000;"><strong><span style="font-size: 16px;">1)制作圖形</span></strong></span></p> <p>一旦你創建了一個<span style="color: #000000;">Graphics</span>類,你就需要<span style="color: #3366ff;"><a href="http://www.createjs.cc/easeljs/docs/classes/Shape.html" target="_blank"><span style="color: #3366ff;">Shape</span></a></span>類,下面的代碼接上面的&ldquo;g&rdquo;。</p> <div class="cnblogs_code"> <pre><span style="color: #0000ff;">var</span> square = <span style="color: #0000ff;">new</span><span style="color: #000000;"> createjs.Shape(g); square.x </span>= square.y = 100<span style="color: #000000;">; stage.addChild(square);</span></pre> </div> <p><img src="https://images2015.cnblogs.com/blog/211606/201604/211606-20160412152319879-849956821.jpg" alt="" data-pinit="registered" /></p> <p>除了正方形,還可以有三角形、圓、多邊形等,詳細的代碼可以在<span style="color: #3366ff;"><a href="http://codepen.io/strick/pen/BKYdRP" target="_blank"><span style="color: #3366ff;">這里看到</span></a></span>。</p> <p><img src="https://images2015.cnblogs.com/blog/211606/201604/211606-20160412152537832-2122862430.jpg" alt="" data-pinit="registered" /></p> <p>&nbsp;</p> <p><span style="color: #008000;"><strong><span style="font-size: 16px;">2)簡單的動畫</span></strong></span></p> <p>使用動畫就會引入<span style="color: #3366ff;"><a href="http://www.createjs.cc/tweenjs/docs/modules/TweenJS.html" target="_blank"><span style="color: #3366ff;">TweenJS</span></a></span>模塊,將會用到上面畫正方形的Graphics代碼,多了下面兩句代碼。</p> <div class="cnblogs_code"> <pre><span style="color: #008000;">//</span><span style="color: #008000;">繞著圖形中心滾動</span> square.regX = square.regY = 50;<span style="color: #008000;">//</span><span style="color: #008000;">設置圖形的X和Y軸位移 </span> <span style="color: #000000;">createjs.Tween.get(square).to({ rotation: </span>360<span style="color: #000000;"> }, </span>3000);</pre> </div> <p><img src="https://images2015.cnblogs.com/blog/211606/201604/211606-20160412160531004-27622406.gif" alt="" data-pinit="registered" /></p> <p>&nbsp;</p> <h1>五、一個UI元素demo</h1> <p>接下來制作一個常見的加載條,當年上傳、打開某個程序或做其它操作經常能看到,詳細代碼可以<span style="color: #3366ff;"><a href="http://codepen.io/strick/pen/grewaR" target="_blank"><span style="color: #3366ff;">在這里查看到</span></a></span>。</p> <p><img src="https://images2015.cnblogs.com/blog/211606/201604/211606-20160413213636926-75146437.jpg" alt="" /></p> <p><span style="color: #008000;"><strong><span style="font-size: 16px;">1)制作過程</span></strong></span></p> <p>先設置舞臺,再創建創建加載條,最后用定時器累加加載條長度,其實也可以直接在Ticker事件中累加長度,只是速度會快一點。</p> <div class="cnblogs_code"> <pre><span style="color: #0000ff;">function</span><span style="color: #000000;"> init() { setupStage();</span><span style="color: #008000;">//</span><span style="color: #008000;">設置舞臺</span> buildLoaderBar();<span style="color: #008000;">//</span><span style="color: #008000;">創建加載條</span> startLoad();<span style="color: #008000;">//</span><span style="color: #008000;">用定時器累加加載條長度</span> }</pre> </div> <p>用鏈式寫法來寫更新長度的那段代碼,&ldquo;<span style="color: #808080;">updateLoaderBar</span>&rdquo;是在&ldquo;<span style="color: #808080;">startLoad</span>&rdquo;函數中的。</p> <div class="cnblogs_code"> <pre><span style="color: #0000ff;">function</span><span style="color: #000000;"> updateLoaderBar() { loaderBar.graphics.beginFill(</span>'#00ff00').drawRect(0, 0, LOADER_WIDTH * percentLoaded, 40<span style="color: #000000;">).endFill(); loaderBar.graphics.setStrokeStyle(</span>2).beginStroke("#000").drawRect(0, 0, LOADER_WIDTH, 40<span style="color: #000000;">).endStroke(); }</span></pre> </div> <p>先是畫里面的藍色,再畫邊框。</p> <p><span style="color: #3366ff;"><a href="http://www.createjs.cc/easeljs/docs/classes/Graphics.html#method_beginFill" target="_blank"><span style="color: #3366ff;">beginFill</span></a></span>和<span style="color: #3366ff;"><a href="http://www.createjs.cc/easeljs/docs/classes/Graphics.html#method_endFill" target="_blank"><span style="color: #3366ff;">endFill</span></a></span>組合使用了一下,endFill是指重新開始畫,使得后面的設置不會影響當前的。</p> <p>如果我去掉endFill,將會直接顯示完整的綠色,因為后面的&ldquo;<span style="color: #808080;">drawRect(0, 0, LOADER_WIDTH, 40)</span>&rdquo;,又設置了一遍寬度。</p> <p><img src="https://images2015.cnblogs.com/blog/211606/201604/211606-20160413220703301-608715166.jpg" alt="" /></p> <p><span style="color: #3366ff;"><a href="http://www.createjs.cc/easeljs/docs/classes/Graphics.html#method_beginStroke" target="_blank"><span style="color: #3366ff;">beginStroke</span></a></span>和<span style="color: #3366ff;"><a href="http://www.createjs.cc/easeljs/docs/classes/Graphics.html#method_endStroke" target="_blank"><span style="color: #3366ff;">endStroke</span></a></span>組合使用,目的和上面的差不多。</p> <p>如果把&ldquo;endStroke&rdquo;去掉,就會發現多了根右邊框,之所以會多是前面的&ldquo;<span style="color: #808080;">drawRect</span>&rdquo;影響了展示。</p> <p><img src="https://images2015.cnblogs.com/blog/211606/201604/211606-20160413222118988-703939014.jpg" alt="" /></p> <p>&nbsp;</p> <p><span style="color: #008000;"><strong><span style="font-size: 16px;">2)一點小改造</span></strong></span></p> <p>后面再觀察一下發現,其實可以不用每次來畫邊框,邊框可以在&ldquo;<span style="color: #808080;">buildLoaderBar</span>&rdquo;函數中定義。</p> <div class="cnblogs_code"> <pre><span style="color: #0000ff;">function</span><span style="color: #000000;"> buildLoaderBar() { loaderBar </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> createjs.Shape(); loaderBar.x </span>= loaderBar.y = 100<span style="color: #000000;">; loaderBar.graphics.setStrokeStyle(</span>2).beginStroke("#000").drawRect(0, 0, LOADER_WIDTH, 40<span style="color: #000000;">).endStroke(); stage.addChild(loaderBar); }</span></pre> </div> <p>相應的&ldquo;<span style="color: #808080;">updateLoaderBar</span>&rdquo;函數也要做些修改,<span style="color: #3366ff;"><a href="http://www.createjs.cc/easeljs/docs/classes/Graphics.html#method_drawRect" target="_blank"><span style="color: #3366ff;">drawRect</span></a></span>中的X、Y坐標要修改下,寬度也要改變下。</p> <p>本來以為設置了邊寬為2,那么也要偏移2,但其實不是,只需要偏移1就行了。</p> <div class="cnblogs_code"> <pre><span style="color: #0000ff;">function</span><span style="color: #000000;"> updateLoaderBar() { loaderBar.graphics.beginFill(</span>'#00ff00').drawRect(1, 1, LOADER_WIDTH * percentLoaded - 2, 38<span style="color: #000000;">).endFill(); }</span></pre> </div> <p>如果我把邊框的寬度改成4,偏移和寬度又要重新計算了,怪不得寫在里面,就方便多了。</p> <p>&nbsp;</p></div><div id="MySignature"></div> <div class="clear"></div> <div id="blog_post_info_block"> <div id="BlogPostCategory"></div> <div id="EntryTag"></div> <div id="blog_post_info"> </div> <div class="clear"></div> <div id="post_next_prev"></div> </div>
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看