2016-08-16 3 views
0

問題はもう同じではないので意味があるので、私は新しい質問をしました。AS3カスタムカーソルインビジブル

私は着色ゲームを作っています。 CanvPark_mcは、キャンバスの作成の詳細とすべてのブラシの詳細が記載されたムービークリップです。 Huge、Medium、およびSmallSelected1変数は、ブラシをクリックすると変更される変数で、ブラシを識別できます。

最後にクリックされたブラシに応じてカーソルを切り替える必要があります。これは最初のparamentersを通して行うことができます。 は今のところ、これがスイッチに私のコードで、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(); 

    } 

} 

で@NBoooの助けを借り、このコードの問題のおかげで、残念ながら、私が言ったのボタンをクリックすると、カーソルが消え、ということです。これまでに作ったムービークリップには変わりません。

ifブロック内のremoveChildは、以前にカーソルをクリックした後、画面上のcursor_mcの以前のインスタンスを削除することを目的としています。

テストでは、最初のifブロックで、パラメータの1つに==の代わりに=が付いています。

例:彼らはすべてちょうど=にまで減少している場合は、リスト内の場合はさらに

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);がある前であっても、すでにこの問題が起きていました。 'Error#2025:提供されたDisplayObjectは呼び出し元の子でなければなりません。 ' – TwistedRaven

+0

最後のコード例では、' == 'を'='は1つの '= 'が代入をしているので意味があり、ブール式ではありません。ですから、 'if'文の条件で' = 'を使うと、それは通常"真理 "として解決されます。すべてのif文を1つの '= 'を使用するように変更すると、それらはすべて真であり、最後の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ブロックが関数内にないため、コードがtogheterと相関していませんでした。私はそれをテストの中に入れ、それがうまくいった。クリックしてマウスをブラシに変えると、ムービークリップはマウスをたどり始めます。別のブラシに変更すると、ムービークリップがそこに残されます。これはifの可視性を切り替えることで修正されます。 :)

これは意図したとおりに動作しています。

これが誰かを助けることを願っています!