2010-03-25 61 views
0

這可能嗎?在Sprite上設置scaleX屬性而不改變裏面的孩子

我的網站分別在右側和左側分別設置了next和prev按鈕,當您翻轉按鈕周圍的任意一個命中區域時,Sprite將淡入其中,其中包含描述下一頁的TextField。所述Sprite調用StartDrag()方法,因此它在界限內跟隨鼠標,這在頁面左側是完美無瑕的。不過,Adobe似乎忘記了設置一種方式來動態更改Sprite,MC的註冊點,所以當您翻到頁面的右側時,精靈會從左上角顯示,並且主要離開舞臺。

試圖破解這個問題我嘗試了很多東西(別人寫的類,其他黑客),我發現的最好的方法是在Sprite上使用scaleX方法,將比例更改爲-1。這當然會讓Sprite看起來像是從它的正常點反射出來的,這意味着它的所有孩子都向後退出。

是否有反正我可以使用這個黑客沒有它改變文本?

OR

有誰知道不同的方法去從另一個角落顯示雪碧?任何讓Sprite淡入的方法,並且在鼠標指針的LEFT HAND側跟隨鼠標?

非常感謝您提前。

這裏是一個片段給所發生的事情的想法:

naxtPage.labelBG.scaleX = -1; 
nextPage.labelBG.startDrag(true, nextHitRect); 
nextPage.labelBG.x = nextPage.labelBG.parent.mouseX; 
nextPage.labelBG.y = nextPage.labelBG.parent.mouseY; 

乾杯

回答

0

你可以這樣做完全不同的,通過使用ENTER_FRAME事件。如果您只在用戶滾動按鈕時創建事件,那麼在事件觸發的函數內您檢查鼠標相對於舞臺邊界的位置,並確定彈出窗口相對於光標的位置。由於該功能將被稱爲每一幀,所以彈出窗口將跟隨鼠標,總是在正確的位置。喜歡的東西:

function onMouseOver(event:MouseEvent):void 
{ 
    addEventListener(Event.ENTER_FRAME, updatePopup); 
} 

function updatePopup(event:Event):void 
{ 
    if (mouseX > (stage.width - popup.width)) 
    { 
     //Display the pop up on the left of the cursor 
     popup.x = mouseX - popup.width; 
    } 
    else 
    { 
     //Display the pop up on the right of the cursor as normal 
     popup.x = mouseX; 
    } 
} 

你想也需要創建一個部署事件,當觸發刪除ENTER_FRAME事件偵聽器。我還沒有測試過這個代碼,但我猜想這些代碼會解決你的問題。

希望有所幫助。

得不

+0

這工作的一個考驗,但由於框架的網站是建立在的性質,我無法實現它 - 我們有自定義事件類型的多個實例,我不能解析此想法通過。 但是,我通過將彈出窗口封裝在另一個看不見的精靈並將彈出窗口設置爲-container.width來讓它以另一種方式工作。仍然hackish,但似乎工作。 非常感謝您的回覆!非常感謝。 – grammar 2010-03-26 19:39:41

+0

沒問題,我很高興你設法找到解決方案! – debu 2010-03-26 19:48:36