- ベストアンサー
絵を描く際に座標を記録する配列の作成方法とエラーの解決方法
- 絵を描く際に、ボタンが押されたときやカーソルが動いたときに座標を記録する配列を作成しています。
- 配列allには、各筆の座標の集合が格納されています。
- エラーが発生してしまう原因は、関数内で定義された配列hitohudeが読み込めないことが原因です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
hitohudeを外で定義するだけでいいと思いますよ その上でBEGINでhitohude=new Array()するだけ spliceとかすることはありません 新しい配列に参照を変えないでspliceしたら さっき書いた線の座標配列を消してしまいますから
その他の回答 (2)
- aspnet
- ベストアンサー率79% (72/91)
#1です。 さっきFlash入ったマシンで確認しました。 spliceしちゃ駄目ですね。ASのArrayは参照型なので、そいつを追加した後、いったん空にして使いまわすんで、延々と同じhitohudeが配列に追加されたものができて。。 #2さんの hitohude = new Array(); で新しい配列参照を確保するのが正解です。
お礼
どうもありがとうございました
- aspnet
- ベストアンサー率79% (72/91)
いま使ってるマシンにFlash入ってなくて動作試せないんですが、メソッド内部で 定義生成したローカル変数に、外部メソからアクセスするのはそりゃー無理です。 なので、"hitohude"Arrayの定義を外に出してあげて、BEGINメソではその全配列 要素を削除するように。 BEGINイベントハンドラで、Array要素が空なのでspliceしたらエラーが出る?場合 は、"hitohude"になんか要素を入れれば。 hitohude.splice(0)の代わりに、hitohude=null;でもいけるかな? 変更箇所だけ書きますね。 var hitohude:Array = new Array(); // hitohudeをprivateなvarに // hitohude.push("始めやす"); function BEGIN(eventObject:MouseEvent):void { hitohude.splice(0); // hitohudeから全要素削除(クリア) } function DRAW(eventObject:MouseEvent):void { // 変更なし } function END(eventObject:MouseEvent):void { // 変更なし } 外していたらごめんなさい。
補足
hitohude.splice(0); // hitohudeから全要素削除(クリア) は上手くできているのですが、二筆目以降、前の筆でallに入れたhitohudeがhitohude.splice(0);とDRAWでの変更に影響されてしまっていて、結果としてallが最後に作った同じhitohudeが筆の回数分連なったものになってしまいます・・・
お礼
どうもありがとうございました