お絵描きツールの線描画イベントを削除する方法

このQ&Aのポイント
  • お絵描きツールを製作しています。線の描画範囲をオブジェクト上に限定するためマウスLeave時に線の描画イベントを削除していますが、描いた線の真下にマウスを動かすとイベントが感知されず線が描画し続ける問題が発生しました。
  • マウスの真下に描いた線があるとMouseLeaveイベントを感知しないため、どのように対処すべきか悩んでいます。
  • サンプルサイトをご参考いただき、お絵描きツールの線描画イベントを削除する方法についてアドバイスをお願いします。
回答を見る
  • ベストアンサー

お絵描きツールを製作しています。

お絵描きツールを製作しています。 線の描画範囲をあるオブジェクト上のみに限定するために、 MouseLeave時に線の描画イベントを削除しているのですが、 マウスをゆっくり動かして線を描画したままオブジェクト を離れるとMouseLeaveイベントが感知されずに線を描画し 続けてしまいます。 どうやらマウスの真下に描いた線があるとMouseLeaveイベント を感知しないようだとわかったのですが、こういった場合 どのように対処するべきでしょうか? 【サンプルサイト】 http://wbrabit.com/kLabo/paint_test/bin/index.html アドバイスをお願い致します。

  • Flash
  • 回答数1
  • ありがとう数1

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

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

graphics.lineTo()するSpriteと 当たり判定用のSpriteを別にしておく RectangleのcontainsPoint()なんかで 当たり判定をとるようにする どっちが適しているかは作り次第かと

amane123
質問者

お礼

ご回答ありがとうございます。 早速試してみます。

amane123
質問者

補足

早速試してみました。 若干他のところでBugはありますが、解決です! H240S18B73さん、度々ご回答いただきありがとうございます!

関連するQ&A

  • 簡単なお絵描きツールのサンプルを製作中なのですが、

    簡単なお絵描きツールのサンプルを製作中なのですが、 描画した線の内側をバケツツールで塗りつぶす機能を 実装しています。 【サンプルサイト】 http://wbrabit.com/kLabo/paint_test/bin/index.html 塗りつぶした際に線と塗りつぶした範囲の間にわずかな 隙間のようなものができてしまいます。 描画した線をbitmapに変換してsmoothingをかける等して みたものの状況は変わりません。 キレイに塗りつぶすにはどうすればよいのでしょうか? アドバイスをお願い致します。

    • ベストアンサー
    • Flash
  • Visual Web Developer 2008 Expressでの線描画

    Visual Web Developer 2008 ExpressでWebアプリを勉強しています。 Webの画面上に描画エリアを設けて、その中に線(Lineや PolyLine)の 描画をしようと思うのですが、インターネットで調べると、PictureBoxを配置して、その中に描画するように書いてあります。 しかし、Visual Web Developer 2008 Expressのツールボックスには、PictureBoxは、ありません。 (Imageならあります) JavaScriptで描画するという手もありますが、プログラム(C#)の中にPaintイベントを作成して、描画を行うようにするには、どうすればよいでしょうか? 最終的には、クライアントからデータを送って、その内容を描画するようなページにしたいと思っています。 やはりFlashを使わないと不可能でしょうか? Visual Web Developer 2008 Expressでの何か良いサンプルがありましたら、紹介していただけるとありがたいです。

  • Flashでお絵描きアプリを作っていますが…

    現在、Adobe Flash Professional CS6でBitmapを使ったお絵描きアプリを作っているのですが途中で描画した線が消えてしまい困っています。 どなたか知恵を貸していただけないでしょうか。 現段階のプログラムは、Bitmapを配列で管理をしたくて以下のような手順で組んでいます。 1.ステージ上のボタンが押されるとイベントが発生 2.配列の1つにBitmapをnewする 3.2のBitmapDataのサイズと透過を設定しBitmapDataを作成 4.addChild()で表示 5.描画処理 1から5の手順を繰り返して配列にお絵描きの記録をとっています。 最初はうまく動いているのですが、24回以上ボタンを押した時(Bitmapを24回以上addChildすると)に、1番目に描画されたものから順に消えしまい困っています。 以下の2点がわかっていることです。 •Flash上のシュミレータ、Androidのタブレット、iPad3すべて同じ現象が起きます。 •BitmapDataのサイズを小さくしても同じ数で描画が消え始めます。 この問題で何日も悩んでいます。 どなたか、原因や対策がわかる方がいればご回答よろしくお願いします。

  • 実行状態中にオブジェクトの配置、サイズ変更はできますか?

    ご質問させていただきます。 Visual Basic 2005 を使っています。 やりたいこととは、 実行状態のフォーム(GroupBoxオブジェクト等)にTextBoxや線/円オブジェクトを置いたり、 そのオブジェクトをマウスクリックで”選択して”縦横のサイズを変更したり、位置を変更したいのです。 (できればマウス右クリックでプロパティの変更なども) 大まかに言えば、 実行状態のフォームに「デザイン状態の操作」や「Excel上の図形描画の操作」と同じようなことができるのでしょうか? (ツールボックスからデザインフォーム上へのオブジェクトの配置、配置したオブジェクトに マウスクリックをしてのサイズ変更、コピー&ペースト処理など) はじめは、直線や四角形を描画して期待通りのことができるかと思いましたが、 やはり描画した後にその線を”つまむ”ことができませんでした。 ちなみに、VB2005ではLineやShape系はないので、VB2005 PowerPacks2.0 を入れることで、 VB6でのLineコントロールみたいな動きはできました。 良いアドバイスありましたらお願いいたします。

  • リスナについて

    Java を勉強している者です GUIライブラリである awt,swing のリスナについての質問です awt,swing では リスナというイベント処理用のクラスと処理内容を用意して その部品に、イベント用のリスナを登録することによって、コールバックする仕組みになっていると思います。 リスナとイベントの対応ですが、マウスリスナやキーリスナ、ボタンを押したときに対応するアクションリスナ などがありますが、多用する再描画に関しての paintListener がありません 再描画に対応する場合、常に部品を継承して、paintcomponent をオーバーライドして記述しなければなりません 再描画も重要なイベントだと思うのですがなぜリスナが用意されてないのか。 JFrame j = new JFrame(); j.addPaintListener( new PaintAdapter { void onPaint() { ... } } のように描画処理を後付できないかという質問です。 できるようならサンプルのコードを教えてください。 またpaintリスナが用意されない理由があればこれも教えていただけると幸いです。

    • ベストアンサー
    • Java
  • Paint.net でフリー曲線を描きたい

    PictBear というフリーのソフトがあるのですが、このソフトの曲線描画の手法が気に入ってます。 ただ、PictBear は開発を終了してまして、多数のレイヤーが使用出来るフリーのソフトとしてはPaint.net しかありません。 PictBear の曲線描画はマウスで次々ポイントを指定していくと、その次々の点を自動的に滑らかな曲線で繋いでくれと言う優れものです。 Paint.net の曲線ツールはめんどくさい。 で、そんな、次々とポイントを指定していくだけで連続曲線を描けるプラグインはないのでしょうか?

  • VB.NETのグラフィック描画について

    グラフィック描画ですが、引数を持たないサブルーチンプロシージャ(固定的な 目盛り等)は、PictureBox_paint(***イベントプロシージャ内に記述すればグラフィック描画ができます(e.Graphicsでグラフィックスオブジェクトを取得できる為)が、 X、Y座標を引数としたサブルーチンプロシージャを作り、その中でLineDraw(*****で描画させたい場合サブルーチンプロシージャ内に dim g As Graphics=pictureBox1.CreateGraphics() でグラフィックオブジェクトを生成しても 描画できないのですがどのようにすれば解決できるでしょうか(イメージがわかり難いかもしれませんのでサンプルを書きました) よろしくお願いします (1)private sub pictureBox1_paint(Byval sender as Object, Byval e as system****** e.Graphics.DrawLine(****** (これは描画できる) End Sub (2)private sub zahyou() ' 座標を生成するサブルーチンプロシージャ dim i as integer for i=0 to 10 hyouji( i , i*5 ) End Sub private sub hyouji( x as integer, y as integer) ’直線を引くサブルーチンプロシージャ dim g As Graphics=pictureBox1.CreateGraphics() g.DrawLine(***,x,y**** (これは描画できない)

  • illustrator パターンを作成する方法

    illustratorを勉強中ですが、わからないことばかりです。 よろしくお願いします。 illustratorはcs2を使っています。 まず、簡単な図で基本的なパターン作成の練習を始めたのですが、長方形ツールから、長方形を描画しておなじように、今度は円を描画していきたいのですが最初の長方形は次の円を描画しようとするとすぐ消えてしまいます。同時に複数のオブジェクトを表示しないとパターンはできないと思うのですが、(塗りと線ともになしに設定)どういうふうに作成していったらいいのでしょうか?基本的なことだと思うのですが、調べてみたのですがどこにも詳しいことは載ってませんでした。

  • javaの描画関係のプログラムの考え方について

    昔からあるJavaの基本的なグラフィックスのプログラム(下方のサンプル)の構造の基本についてお尋ねします。 プログラムの構成を言葉で言うなら、 1 クラスの設定 2 クラス内部のメソッドの作成(コンストラクタ、paint, main) (mainはメソッドとは言わないかもしれませんが、クラスの中の実働部隊のトップということでそういう位置づけにしました。) ここで疑問ですが、 疑問1 paintメソッドですが、どのようにして呼ばれていると考えるのでしょうか。プログラムの中で呼び出されていないように見えます。 mainの中のw.setVisible(true)とかw.show()が描画せよ、というトリガーだと思いますが、paintを動かせとはストレートには読めません。 w.paint() とかだとTestクラスのオブジェクトwのメソッドpaintを動かしているということが示されるわけですが。こういうのがないですね。 疑問2 mainの中のFrame w=new Test()はTest w=new Test()でも動作しますが、これはあまり気にしなくていいでしょうか。 ---- 以下はプログラムの構造です。--- import 適当に public class Test extends Frame{ public Test(){ クラスと同じ名前なのでコンストラクタですね。 setSize(300,300);ウィンドウのサイズ指定 addWindowListener() などいろいろウィンドウのセッティング ウィンドウの閉じ方とか 描画のためのキャンバスの用意 } public void paint(Graphics g){ g.drawLine(0,0,200,200); 描画本体 この部分をいろいろプログラミングする } public static void main(String[] args){ メインなのでここがスタートライン Frame w=new Test(); オブジェクトを作って // w.show(); w.setVisible(true); 描け } }

  • Javaアプレットで描画の中断がしたい

    Java初心者です。学校の課題で数学シュミレーションの結果を Javaアプレットで表示するプログラムを作成しています。 この課題のJavaアプレットでは 複素平面のシュミレーション(計算結果を色のグラデーションで表示する)なのですが、 チョイスやボタン、マウスクリックなどによって、 初期条件や、描画方式、表示範囲などを指定することができます。 とりあえず、シュミレーション結果の描画は 試行錯誤の結果表示ができるようになりました。 paint(Graphics g)メソッドで数値計算、及び描画をしています。 (ちなみに余談かもしれませんがダブルバッファリングをしていて、 描画内容をImageとして書き込んでおいて描画するというかたちです。) 「計算途中(計算には結構時間がかかる)に 新たにボタンなどで指定条件が変更された場合、 現在の描画を中断して次の計算と描画を開始できるように プログラムを改良しなさい」というのが今回の課題です。 つまり、「プログラム的にはpaintメソッドが実行されている途中に 特定のイベントが発生したらpaintメソッドを中断し、 もういちど呼びなおしなさい」ということかと思われます。 スレッドを作り、そのスレッドを中断するなども考えました。 インターネットで検索もしてみましたが、 なかなか情報を見つけられず困っています。 学生が作るプログラムなのでそんなに難しいことではないのだと思うのですが 解決できませんでした。 どうぞよろしくお願いします。