2016-08-16 44 views
0

我提出了一個新問題,因爲它有意義,因爲問題不再一樣了。AS3自定義遊標隱形

我正在着色遊戲。 CanvPark_mc是具有創建畫布和所有畫筆細節所在位置的細節的Movieclip。巨大,中等和SmallSelected1變量是單擊畫筆時更改的變量,因此您可以識別它們。

我想根據上次點擊的畫筆切換光標。這可以通過第一個參數來完成。 現在,這是我的代碼轉換,得益於@NBooo的幫助與此代碼previous question

var cursor_mc: MovieClip = new MovieClip(); 

if (CanvPark_mc.HugeSelected1 == true) { 
    cursor_mc = cursor1_mc; //Big Cursor 
    removeChild(cursor_mc); 
} 

if (CanvPark_mc.MediumSelected1 == true) { 
    cursor_mc = cursor2_mc; //Medium Cursor 
    removeChild(cursor_mc); 
} 

if (CanvPark_mc.SmallSelected1 == true) { 
    cursor_mc = cursor3_mc; //Small Cursor 
    removeChild(cursor_mc); 
} 



stage.addEventListener(MouseEvent.MOUSE_MOVE, moveCursor); 

function moveCursor(myEvent: MouseEvent) { 
    if (CanvPark_mc.SmallSelected1 == false && CanvPark_mc.MediumSelected1 == false && CanvPark_mc.HugeSelected1 == false) { 
     Mouse.cursor = "auto"; 
    } else if (cursor_mc){ 
     addChild(cursor_mc); 
     setChildIndex(cursor_mc, this.numChildren - 1); 
     cursor_mc.x = stage.mouseX; 
     cursor_mc.y = stage.mouseY; 
     cursor_mc.mouseChildren = cursor_mc.mouseEnabled = false; 
     Mouse.hide(); 

    } 

} 

的問題,不幸的是,是,每當我按一下按鈕說,光標消失。它不會改變我以前製作的任何一個影片剪輯。

請注意,if塊中的removeChild有希望在過去單擊它們之後刪除屏幕上以前的cursor_mc實例。

在測試中,它只會改變,在第一個if塊中,其中一個參數具有a =而不是==。

例子:

if (CanvPark_mc.HugeSelected1 == true) { 
    cursor_mc = cursor1_mc; // Big Cursor 
    removeChild(cursor_mc); 
} 

if (CanvPark_mc.MediumSelected1 == true) { 
    cursor_mc = cursor2_mc; //Medium Cursor 
    removeChild(cursor_mc); 
} 

if (CanvPark_mc.SmallSelected1 = true) { 
    cursor_mc = cursor3_mc; //This is the one he'll run, showing the smallest cursor 
    removeChild(cursor_mc); 
} 

另外,如果他們都降低到剛剛=,代碼將如果列表中選擇最後一個。 我認爲我的代碼存在問題,我無法分辨嘗試幾小時後發生了什麼。

難道你們能幫我弄清楚嗎?

+0

您正在將'cursor_mc'設置爲新光標,但是您立即將其從舞臺上刪除?我想你想刪除舊的光標,而不是新的。 EG:在更改遊標之前,嘗試執行'removeChild'。 –

+0

@SunilD。 甚至在'removeChild(cursor_mc);'之前,它已經在做這個問題。 而且,如果我事先做好了,它會給我這個錯誤: '錯誤#2025:提供的DisplayObject必須是調用者的孩子。' – TwistedRaven

+0

關於上次代碼示例,您將'== == '=',這是有道理的,因爲一個'='正在做一個賦值,它不是一個布爾表達式。所以當你在'if'語句的條件中使用'='時,它通常會解析爲「truthy」。當你改變所有的if語句來使用一個'='時,它們都是真的,因此你可以看到最後一條if語句的結果。所有這些都說明你的'if'陳述中的條件可能不會評估爲「真實」......並且你可能會嘗試檢查它們。 –

回答

0

我找到了自己的問題的答案,所以我會張貼代碼來幫助別人。

var cursor_mc: MovieClip = new MovieClip(); 

    stage.addEventListener(MouseEvent.MOUSE_MOVE, moveCursor); 

    function moveCursor(myEvent: MouseEvent) { 

    if (CanvPark_mc.HugeSelected1 == true) { 

     cursor_mc = cursor1_mc; 
     cursor1_mc.visible = true; 
     cursor2_mc.visible = false; 
     cursor3_mc.visible = false; 
    } 

    if (CanvPark_mc.MediumSelected1 == true) { 

     cursor_mc = cursor2_mc; 
     cursor1_mc.visible = false; 
     cursor2_mc.visible = true; 
     cursor3_mc.visible = false; 
    } 

    if (CanvPark_mc.SmallSelected1 == true) { 

     cursor_mc = cursor3_mc; 
     cursor1_mc.visible = false; 
     cursor2_mc.visible = false; 
     cursor3_mc.visible = true; 
    } 
    if (CanvPark_mc.SmallSelected1 == false && CanvPark_mc.MediumSelected1 == false && CanvPark_mc.HugeSelected1 == false) { 
    Mouse.cursor = "auto"; 

    } else if (cursor_mc) { 

     addChild(cursor_mc); 
     setChildIndex(cursor_mc, this.numChildren - 1); 
     cursor_mc.x = stage.mouseX; 
     cursor_mc.y = stage.mouseY; 
     cursor_mc.mouseChildren = cursor_mc.mouseEnabled = false; 
     Mouse.hide(); 

    } 

} 

if塊不在函數內部,所以它不會將代碼關聯到輸出。我把它作爲一個測試,它的工作。因爲當你點擊鼠標來改變畫筆時,Movieclip會開始跟隨你的鼠標。如果換成其他畫筆,動畫片段會留在那裏。這是通過在if中切換它的可見性來解決的。 :)

它現在按預期工作。

希望這可以幫助別人!