2017-06-02 56 views
2

在Adobe Animate CC HTML5 Canvas(createJS)中,我試圖做一些非常簡單的事情,以便在整個廣告階段觸發動畫翻轉moused over ,並在鼠標離開舞臺時觸發動畫展示。它應該很簡單,但事實並非如此。在stage上使用mouseentermouseleave是滯後的,只能間歇性地工作。這與mouseovermouseout一樣。Adob​​e Animate CC Canvas鼠標在舞臺上的動作是laggy和間歇的

下面是是laggy和間歇性的代碼:

stage.addEventListener("mouseenter", fl_MouseOverHandler.bind(this)); 
stage.addEventListener("mouseleave", fl_MouseOutHandler.bind(this)); 

function fl_MouseOverHandler(){ 
    this.btnOverAnim.gotoAndPlay("on"); 
} 

function fl_MouseOutHandler(){ 
    this.btnOverAnim.gotoAndPlay("off"); 
} 

我也上的按鈕嘗試mouseovermouseout舞臺的整體大小和我有同樣的問題。 (也是這樣做的,從框架內部完全不起作用,並且廣告在框架內被投放)。我把var frequency的方法提高到90看看這是否有助於滯後,但事實並非如此。

這是簡單的mouseover/mouseout代碼我想:

var frequency = 90; 
stage.enableMouseOver(frequency); 

this.bgCta.addEventListener("mouseover", fl_MouseOverHandler.bind(this)); 
this.bgCta.addEventListener("mouseout", fl_MouseOutHandler.bind(this)); 

createJS website它說:「你可以監控是否指針在畫布上用stage.mouseInBoundsmouseleave/mouseenter事件。」所以我想知道如果使用stage.mouseInBounds會有所幫助(但我無法找到如何使用它的任何地方)。但我其實並不認爲這會有所幫助,因爲我認爲整個問題都是關於createJS不能在鼠標速度夠快的情況下讀取的。

有誰知道如何解決這個lagginess和間歇性射擊?解決辦法?爲什麼createJS不僅僅像純js一樣監視mouse events

而且mouseentermouseleavecreateJS階段不上平板電腦或移動工作,這是一個問題,所以這將是更好的一個按鈕,mouseovermouseout做這個舞臺的整體尺寸。我曾嘗試使用mouseovermouseout,並且在按鈕邊緣和廣告橫幅邊緣之間的按鈕周圍有3像素的空間,這有所幫助,但它仍在間歇性地發射。

你的想法和想法請。

回答

3

鼠標懸停檢查是昂貴的。畫布基本上只是一個位圖,所以EaselJS不能在瀏覽器中使用鼠標事件(您只需在整個畫布上使用鼠標事件)。相反,在EaselJS中的mouseover需要將每個元素繪製到1x1像素的畫布上,然後檢查填充。這樣可以實現像素完美的檢測,但是如果您要檢查大量內容或檢查頻繁,則成本很高。

減少您的頻率: 看起來你已經設置了frequency至90。這是非常高(檢查之間的11毫秒,這基本上是努力實現90 fps)的速度。默認值是10,比一個好的幀速率慢,但速度足夠快以感受響應。你可以把它降到20左右,以便在不必要的高昂的情況下給你一張好看的支票。

修改交互性:你可以做的另一件事是過濾出確切的檢查。默認情況下,所有的顯示對象得到遏制 - 但你可以在任何你不關心(從檢查忽略它們)打開關閉mouseEnabled,並要處理的容器打開關閉mouseChildren減少這種作爲一個單獨的對象(所以像複雜的按鈕一樣被繪製一次,而不是單獨繪製所有的內容)。

// Example 
myBackground.mouseEnabled = false; 
myButton.mouseChildren = false; 

希望有所幫助!

相關問題