0

私はペイント ゲームに取り組んでいます。ブラシをクリックすると、マウスがそのブラシのグラフィカルな対応物に切り替わり、画面上でペイントできるようになります。ブラシが選択されていない場合、マウスは同じままです。

Rectangle とブラシは別の Movieclip にあり、その上に png の線を重ねることができるので、塗りつぶして描画することができます。

シーン 1 のアクション レイヤーで、これはマウスを変更するための私のコードです。

var cursor_mc:MovieClip;

if (CanvPark_mc.HugeSelected1 == true){
    cursor_mc = cursor1_mc;
}else if(CanvPark_mc.MediumSelected1 == true) {
    cursor_mc = cursor2_mc;
}else if(CanvPark_mc.SmallSelected1 == true) {
    cursor_mc = cursor3_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{
    setChildIndex(cursor_mc, this.numChildren-1);
    cursor_mc.x = (mouseX); 
    cursor_mc.y = (mouseY); 
    Mouse.hide();  
    }
}

各ブラシには、それに関連付けられたブール変数 (Small、Medium、HugeSelected1) があるため、どのブラシが選択されていて、どのブラシが選択されていないかを常にコードで知ることができます。

現在、このコードを実行すると、最初は何も起こりませんが、ブラシのいずれかをクリックすると、これが出力に表示されます。

TypeError: Error #2007: Parameter child must be non-null.
    at flash.display::DisplayObjectContainer/setChildIndex()
    at visibilityToggle/moveCursor()[visibilityToggle::frame1:42]

具体的に指しているようです

 setChildIndex(cursor_mc, this.numChildren-1);

正直なところ、このエラーの原因はわかりません。マウスカーソルを変更するのは簡単だと思いました。

どうすればこれを修正できますか?

4

1 に答える 1

0

最初の投稿で投稿したエラーについて - このようなエラーは、使用するオブジェクトが null の場合、つまり初期化されていないか、既に破棄されている場合に発生します。このエラーは通常、NPE (null ポインター例外) に一般化されます。このようなエラーが発生した場合は、すべてのオブジェクトが存在するかどうかを確認する必要があります。

2 番目のエラーは、cursor_mc に親クリップがない (ステージに追加されていない) か、親オブジェクトが setChildIndex を呼び出したオブジェクトと異なるために発生します。このドキュメントを読むことをお勧めします

2 番目の問題を解決するには、親クリップが実際に存在するかどうかを確認します。また、cursor_mc の値を再割り当てした場合は、再度ステージに追加する必要があり、おそらくステージから前のクリップを削除する必要があることに注意してください (cursor1_mc、cursor2_mc、cursor3_mc がステージ上にないと仮定します)。

大まかな例を次に示します。

var cursor_mc:MovieClip;

if (CanvPark_mc.HugeSelected1 == true){
    cursor_mc = cursor1_mc;
}else if(CanvPark_mc.MediumSelected1 == true) {
    cursor_mc = cursor2_mc;
}else if(CanvPark_mc.SmallSelected1 == true) {
    cursor_mc = cursor3_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 = (mouseX); 
        cursor_mc.y = (mouseY); 
        Mouse.hide();  
    }
}
于 2016-08-16T10:12:10.963 に答える