• ベストアンサー
※ 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

  • マウスでドラッグして絵を描くSWFを作っています

    マウスでドラッグして絵を描くSWFを作っています ムービークリップ"masu"を置き、 下のスクリプトで、マウスのボタンを押してしてそのままマウスを動かすと動きに沿って線は引かれ、hの値も正しくトレースされるのですが、ボタンをあげても TypeError: Error #1034: 強制型変換に失敗しました。flash.events::MouseEvent@2ac45ea1 を fl.motion.MotionEvent に変換できません。 というエラーが出力され、 function DEL(eventObject:MotionEvent):void{ removeEventListener(MouseEvent.MOUSE_MOVE,LINE); } が動きません。なぜでしょうか? また、AS1は少しはわかりますがAS3は初心者ですので、もっとよいスクリプトなどありましたら挙げていただけるとうれしいです import fl.motion.MotionEvent; var h = 1; this.masu.addEventListener(MouseEvent.MOUSE_DOWN,MOVE); this.masu.addEventListener(MouseEvent.MOUSE_UP,DEL); function MOVE(eventObject:MouseEvent):void{ this.masu.graphics.moveTo(mouseX,mouseY); this.masu.addEventListener(MouseEvent.MOUSE_MOVE,LINE); } function LINE(eventObject:MouseEvent):void{ h++; trace(h); this.masu.graphics.lineStyle(3,0x000000); this.masu.graphics.lineTo(mouseX,mouseY); } function DEL(eventObject:MotionEvent):void{ removeEventListener(MouseEvent.MOUSE_MOVE,LINE); }

    • ベストアンサー
    • Flash
  • actionscriptの配列について

    antionscript初心者ですが、配列について質問があります。 使っているソフトはadobe flash CS3 professionalです。 配列を利用する際に 入力テキストやダイナミックテキストを入れるということはできないのでしょうか? ↓入力テキストの方 Var x: Array=new Array(2); x[0]= ○○.text; x[1]= ●●.text; ↓ダイナミックテキストの方 Var y: Array=new Array(2); y[0]= □□.text; y[1]= ■■.text; そのあとボタンをクリックしたら for(var i : int =0; i<x.length; i++){ if(x[i]>=5){ y[i]="A" }else if(x<5){ y[i]="B" } } というように 入力テキストにいれられた数値に応じてダイナミックテキストに文字を表示させたいのですが、うまくいきません。初心者なので意味不明な質問になっているかもしれませんが、よろしくお願いします。

    • ベストアンサー
    • Flash
  • Suzkaでダイナミックテキストに座標を表示

    FLASH Suzkaで作成しています。 ダイナミックテキストに座標を表示させたいのですが、 下記のサイトを参考にしましたが、うまくいきません。 http://orange.2-d.jp/flash/action/20_mouse_xy_get_preview.html ↓「FLASHでの座標取得」-過去記事-教えて!goo http://oshiete1.goo.ne.jp/qa1087211.html x座標とy座標を表示させるためのダイナミックテキストと、 スプライト1を用意してこのように並んでいます。 スプライト1 x座標 y座標 スプライト1には、下記のスプリクトを記入しました。 onClipEvent (enterFrame) { _root.x=_root._xmouse; _root.y=_root._ymouse; } あと、過去記事を読むとダイナミックテキストをムービークリップにと 書いていたので、ムービークリップ=スプライト?(Suzuka)と解釈して x、y座標のダイナミックテキストを、それぞれスプライトにして試しましたが うまくいきませんでした。 Suzukaで座標をダイナミックテキストに表示する方法を 教えてください。 宜しくお願いします。

    • ベストアンサー
    • Flash
  • java リアルタイムでマウスの座標を取得したい

    マウスのリアルタイム座標を取得したいのですが、 以下のソースを作りました。 しかし、リアルタイムどころか、マウスをクリックしても座標が取得できません どこを修正すればいいのでしょうか? import java.applet.Applet; import java.awt.*; import java.awt.event.*; import java.awt.event.MouseEvent; import java.net.URL; import java.awt.Image; /*<applet code="applet001" width="640" height="480"></applet>*/ public class applet001 extends Applet implements MouseListener, MouseMotionListener { Dimension dim; int mouse_x, mouse_y; //アプレットの初期化時呼び出される public void init() { dim = getSize(); addMouseListener( this ); } public void update(Graphics g) //オーバーライドして最低限のことだけをする { paint(g); } public void paint(Graphics g) { g.drawString( "マウス:" + mouse_x + "," + mouse_y, 60, 120 ); g.fillOval(mouse_x,mouse_y,30,30); } // マウスの処理 public void mousePressed( MouseEvent e ) { mouse_x = e.getX(); mouse_y = e.getY(); } public void mouseClicked( MouseEvent e ) {} public void mouseReleased( MouseEvent e ) {} public void mouseEntered( MouseEvent e ) {} public void mouseDragged( MouseEvent e ) {} // public void mouseExited( MouseEvent e ) {} // public void mouseMoved( MouseEvent e ) { mouse_x = e.getX(); mouse_y = e.getY(); repaint(); } }

    • ベストアンサー
    • Java
  • press座標とrelease座標からステージの端のXY座標を割り出す

    press座標とrelease座標を結ぶ直線がステージの端まで伸びた際の それぞれのXY座標(下図のpointA、pointB)を割り出す式を教えてほしいです。 ActionScript2.0、Player8でお願いします。      pointA(x,y) -------------○---------------       ・PressのPoint(x,y)    ・ReleaseのPoint(x,y) ----○-----------------------   pointB(x,y) * 「---」は、Stageの端 なにをやろうとしているかというと、2点を結ぶ直線で ふたつに割れるMovieクリップを作りたいんです。 pointAとpointBの座標さえ分かれば、 そのポイントを使って、マスクを二つ作って 割れるMovieClipを作れるかな~と思ったのですが、 どうにもその割り出し方が・・・ しかも、直線のパターンとして --○---------------------  ・ReleaseのPoint(x,y)    ・PressのPoint(x,y) ---------○-------------- という場合もあったり、 ---------------------------------------------- ○ ・ReleaseのPoint(x,y)  ・PressのPoint(x,y) ○ ---------------------------------------------- であったり、様々なパターンが想像できるんですよね。 どうか、よろしくお願いします。

    • ベストアンサー
    • Flash
  • 極座標

    極座標で表したとき(r,θ)=(√5+1,π/10)なる点を直行座標(x,y)で表せ。 ただし、cos,sin,tanなどの三角関数の記号を用いずに表すこと。 r=√5+1 と置いて r^2=x^2+y^2 より 6+2√5=x^2+y^2 とこのようにやってみたのですが、どうも上手くいかないです。 6+2√5=(x+y)^2-2xy と置いてみたりして 6=(x+y)^2 2√5=-2xy ともやってみましたが、解がおかしくなってしまいました。 どなたか教えていただけないでしょうか? よろしくお願い致します。

  • C#でxy座標グラフを描きたい。

    visual studio2005のC#を使っています。 数値処理をしたあとに、xy座標のグラフを描きたいです。 何セットかの任意の2点(x1,y1),(x2,y2)をxy座標グラフにプロットし、二点間の距離を視認することが目的です。 調べてみたところ、「N Plot」というものが見つかりました。これはこの目的に適しているのでしょうか。 ちなみにエクセルでできそうな内容ですが、将来的なプログラムの修正を考えてC#での作成が目的となっています。 また「N Plot」以外にも、もっと適したものなどがあれば教えていただきたいです。よろしくお願いします。

  • 配列に入れたムービークリップのマウスイベントについて

    こんにちは。 actionscript3.0にて制作をしております。 FLASH CS4上にテキストフィールドが入ったムービークリップが予め作成してあり、 それを「box_mc」という名前でライブラリに登録しております。 box_mcを配列に格納し、それぞれにマウスイベントで横に10移動する処理を割り当てたく 下記の様な文法で作成しましたが、ランタイムエラー「#1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。」とエラーが表示されてしまいます。 それぞれの配列に正しくマウスイベントを割り当てるにはどうしたら良いでしょうか? var boxArray:Array = new Array(); for (var i:int = 0; i < 3; i++) { boxArray[i] = new box_mc(); // ボックス // マウスオーバーイベント boxArray[i].addEventListener(MouseEvent.MOUSE_OVER, function (event:MouseEvent):void { boxArray[i].x = 10; }); } お手数では御座いますが、ご教授いただけると幸いです。 宜しくお願い申し上げます。

    • ベストアンサー
    • Flash
  • xmlから配列で取得したものを取り出したい

    as3初心者jpncan15といいます。 xmlから配列で取得したものをfunction外で取り出したいのですがどのようにすればいいのか悩んでいます。functionを調べたり配列を調べたり頭がかなり混乱中です。 お手数ですがご教授いただけますでしょうか? var ary:Array=new Array(); var ary_name:Array=new Array(); var loader:URLLoader = new URLLoader(); var request:URLRequest = new URLRequest("b.xml"); var xml:XML; loader.load(request); loader.addEventListener(Event.COMPLETE , XMLload); function XMLload(e:Event):void { xml = XML(e.target.data); num_txt.text = xml.item.length(); //xml件数をテキストフィールドへ入れる for each(var element:Object in xml.item.thumb) //配列に入れる {ary.push(element);} for each(var element_name:Object in xml.item.name) //配列に入れる {ary_name.push(element_name); trace(element_name);}//出力OK } //function外で配列を使用したい trace(ary[5]); trace(ary_name[2]);

    • ベストアンサー
    • Flash
  • 円周上の座標を求める

    Python 2.7.6 import math rad = math.radians(45) #45°の時のラジアンを求める x = 100 * math.cos(rad) #x座標を求める y = 100 * math.sin(rad) #y座標を求める 円は半径は100としています。 45°の時は(70.7106781187, 70.7106781187)と正しく出るのですが、 90°の時は(6.12323399574e-15, 100.0)、 360°の時は(100.0, -2.44929359829e-14)となり、誤差(?)があるように思います。 正しく計算するにはどうしたら良いでしょうか? 宜しくお願いいたします。