2017-06-05 72 views
0

這裏是場景: 我正在創建一個信息圖交互式動畫,它允許用戶虛擬設置三腳架,與虛擬相機交互等。我需要當箭頭指向用戶應該點擊的位置時停止的時間線。在時間軸應該恢復在點擊三腳架(一個影片剪輯)(三腳架也動畫,然後將視圖切換到第一人稱相機附帶)播放。目前,動畫只是永遠播放,沒有停止任何用戶交互。這裏是我的createJS到目前爲止的代碼:提前,StackOverflow的和他們有關聯的超級程序員的專業知識如何執行gotoAndPlay()和stop()的createJS等效

<!DOCTYPE html> 
    <html> 
    <head> 
    <meta charset="UTF-8"> 
    <title>CreateJS export from birdsofprey-anim9c</title> 

    <script src="http://code.createjs.com/easeljs-0.6.0.min.js"></script> 
    <script src="http://code.createjs.com/tweenjs-0.4.0.min.js"></script> 
    <script src="http://code.createjs.com/movieclip-0.6.0.min.js"></script> 
    <script src="http://code.createjs.com/preloadjs-0.3.0.min.js"></script> 
    <script src="birdsofprey-anim9c.js"></script> 

    <script> 
    var canvas, stage, exportRoot; 

    function init() { 
     canvas = document.getElementById("canvas"); 
     images = images||{}; 

     var manifest = [ 
      {src:"images/Bitmap1.png", id:"Bitmap1"}, 
      {src:"images/Bitmap2.png", id:"Bitmap2"}, 
      {src:"images/Scene_1.jpg", id:"Scene_1"} 
     ]; 

     var loader = new createjs.LoadQueue(false); 
     loader.addEventListener("fileload", handleFileLoad); 
     loader.addEventListener("complete", handleComplete); 
     loader.loadManifest(manifest); 
    } 

    function handleFileLoad(evt) { 
     if (evt.item.type == "image") { images[evt.item.id] = evt.result; } 
    } 

    function handleComplete() { 
     exportRoot = new lib.birdsofpreyanim11a(); 

     stage = new createjs.Stage(canvas); 
     stage.addChild(exportRoot); 
     tripodleg = new lib.LEFT_LEG_MC; 
     stage.addChild(tripodleg); 
     stage.update(); 

     createjs.Ticker.setFPS(24); 
     createjs.Ticker.addEventListener("tick",f); 
     function f(e){ 
     //var t=this; 
     //t.stop(); 
     //exportRoot.stop(); 
     var delay = 4000; 
     var startTime=createjs.Ticker.getTime(); 
     createjs.Ticker.getMeasuredFPS(); 
     if(createjs.Ticker.getMeasuredFPS == 6){ 
      exportRoot.stop(); 
      tripodleg.onclick = function(){ 
       exportRoot.gotoAndPlay(90); 
      } 
      //exportRoot.gotoAndPlay(90); 
      createjs.Ticker.removeEventListener("tick",f); 
      } 
     } 
     createjs.Ticker.addEventListener("tick", stage); 
    } 

    </script> 
    </head> 

    <body onload="init();" style="background-color:#D4D4D4"> 
     <canvas id="canvas" width="550" height="540" style="background- 
    color:#ffffff"></canvas> 
    </body> 
    </html> 

謝謝! -qs [編輯]經由的addChild這次加入我的三腳架的MovieClip到該級的一個實例再次更新我的代碼();並經由exportRoot.stop停止時間軸(); exportRoot沒有停止,任何線索?提前致謝。

回答

0

我猜你是在談論行:

function handlClick(){ 
    mc.play(2); 
} 

如果是這樣,只需使用gotoAndPlay(2),而不是play。 EaselJS最初基於ActionScript語言,因此它反映了很多功能。檢查出MovieClip docs

function handlClick(){ 
    mc.gotoAndPlay(2); 
} 

有一點需要注意:什麼是createjs.Ticker.tickhandlTick方法是什麼?沒有滴答屬性,只有「滴答」事件。這個if語句永遠不會是true。你準備用那個代碼做什麼?當主剪輯到達第30幀時,您是否正在尋找添加的點擊處理程序?或者在30「滴答」之後?無論哪種方式,這都無濟於事。

希望有所幫助。

[編輯基於更新]

看起來你改變了它使用gotoAndPlay,但也存在一些問題:

要調用一個全局gotoAndPlay功能(不存在)而不是定位MovieClip實例。如果您的主時間軸有您想要的框架,請使用exportRoot.gotoAndPlay(90);

接下來,您打電話給this.stop()。事件監聽器是匿名的(這是罰款),但是這意味着thisWindow。同樣,沒有全局stop方法 - 所以你應該把它要停止在時間軸上。在這種情況下,它可能是exportRoot.stop()

乾杯,

+0

您提到:「沒有滴答屬性,只有」滴答「事件。」是的,這也是我所懷疑的,謝謝你的更新。 – querystring

+0

你說:「你要找的點擊處理程序時的主剪輯達到30添加?」 ...究竟。我希望整個時間線在第30幀時停止,而不是時間軸上的MC。我看了一下Ticker.setPause(true)的例子,但它正好在我頭上。也許設置一個FPS的變量告訴Ticker同步到時間軸的幀速率,對吧?感謝您爲這些錯誤提供幫助,請讓我知道如何使stop();我試圖在第30幀創建行動。再次,任何幫助將不勝感激,感謝一百萬。-qs。 – querystring

+0

更新我的代碼以反映Lanny的建議。 -qs – querystring

相關問題