• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:絵を描き、その都度のxy座標を一つの配列に記録するものを作っています。)

絵を描く際に座標を記録する配列の作成方法とエラーの解決方法

このQ&Aのポイント
  • 絵を描く際に、ボタンが押されたときやカーソルが動いたときに座標を記録する配列を作成しています。
  • 配列allには、各筆の座標の集合が格納されています。
  • エラーが発生してしまう原因は、関数内で定義された配列hitohudeが読み込めないことが原因です。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

hitohudeを外で定義するだけでいいと思いますよ その上でBEGINでhitohude=new Array()するだけ spliceとかすることはありません 新しい配列に参照を変えないでspliceしたら さっき書いた線の座標配列を消してしまいますから

noname#153433
質問者

お礼

どうもありがとうございました

その他の回答 (2)

  • aspnet
  • ベストアンサー率79% (72/91)
回答No.3

#1です。 さっきFlash入ったマシンで確認しました。 spliceしちゃ駄目ですね。ASのArrayは参照型なので、そいつを追加した後、いったん空にして使いまわすんで、延々と同じhitohudeが配列に追加されたものができて。。 #2さんの hitohude = new Array(); で新しい配列参照を確保するのが正解です。

noname#153433
質問者

お礼

どうもありがとうございました

  • aspnet
  • ベストアンサー率79% (72/91)
回答No.1

いま使ってるマシンに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 {   // 変更なし } 外していたらごめんなさい。

noname#153433
質問者

補足

hitohude.splice(0); // hitohudeから全要素削除(クリア) は上手くできているのですが、二筆目以降、前の筆でallに入れたhitohudeがhitohude.splice(0);とDRAWでの変更に影響されてしまっていて、結果としてallが最後に作った同じhitohudeが筆の回数分連なったものになってしまいます・・・

関連するQ&A