D0803291 マウスダウンの反応範囲を指定したい
Name 坊ちゃん
Date 2008年03月29日 (土) 20時45分
Message 500×500のドキュメント画面上をマウスでクリックすると、
○▲が描けるMCを作っています。(○▲は別途MC用意)

画面の右端にボタン(戻る等)を設置したところ、ボタンがクリック
範囲内にあるため、ボタン上も描画されてうまく行きません。

ドキュメントの大きさを横520、縦500に変更して、ボタンを置いて
みましたが結果は一緒です。

スクリプトは下記のように記述しています。ボタンエリア(右端20×500)
内をマウスクリックしても描画できないようにしたいのですが、スクリプト
が分かりません。ご教授いただけませんでしょうか。

初心者で説明が拙く、申し訳ありません。よろしくお願いします。

this.onMouseDown = function ()
{
for (var _loc2 = 0; _loc2 < 8; ++_loc2)
{
var _loc3 = _root.attachMovie("hanabira", "hanabira" + _loc2, _loc2);
_loc3._x = _root._xmouse;
_loc3._y = _root._ymouse;
_loc3._rotation = 45 * _loc2;
} // end of for
};
Response 01
2008年03月29日 (土) 21時06分> joy 
坊ちゃんさん、
今晩は。
ざっと見ただけで、検証してないので、間違えているかもしれませんが、mouseDownを使うと、通常は、対象MovieClip以外にも反応しますので

ボタン上も描画されてうまく行きません。
>このようになります。

新たなレイヤーを作り、そこに、描画用のMovieClipを作り、インスタンス名を、仮に、drawとでもして、フレームアクションで、

draw.onPress = function ():Void{
for (var _loc2 = 0; _loc2 < 8; ++_loc2){
var _loc3 = this.attachMovie("hanabira", "hanabira" + _loc2, _loc2);
_loc3._x = _root._xmouse;
_loc3._y = _root._ymouse;
_loc3._rotation = 45 * _loc2;
} // end of for
};
では、思った動きには、なりませんか?
Response 02
2008年03月30日 (日) 12時07分> 坊ちゃん   
joyさん、早速のご教授ありがとうございます。

何せ超初心者ですのでうまく動作してくれません。
再度説明させてください。

○▲というのは例えで、実際は花びらを1枚描き、修正→シンボルに
変換。タイプをMC、名前をhanabiraにして、別シーンのレイヤーに
アクションを記述しています。

すると画面のどこをクリックしても一枚の花びらが8枚になって綺麗に
描画してくれます。

mouseDownは、ボタンの上も描画されるので、draw.onPressにするー
とのご助言ですが、インスタンス名をdrawにするというのが??です。

hanabira→drawに変更する、ということでしょうか。だとすると3行目

this.attachMovie("hanabira", "hanabira" + _loc2, _loc2);
の"hanabira", "hanabiraの処理はどうするのでしょう?

ど素人が不躾なお尋ねで恥ずかしい限りですが、今一度解説頂ければ
幸いです。
Response 03
2008年03月30日 (日) 12時34分> daniwell 
描画しないエリアが除外しやすいカタチであれば、
こういうやり方でもできます。

this.onMouseDown = function ()
{
  if ( _root._xmouse < 500 ) {
    for (var _loc2 = 0; _loc2 < 8; ++_loc2)
    {
      var _loc3 = _root.attachMovie("hanabira", "hanabira" + _loc2, _loc2);
      _loc3._x = _root._xmouse;
      _loc3._y = _root._ymouse;
      _loc3._rotation = 45 * _loc2;
    }
  }
};


でも、joyさんの解説されているやり方のほうが柔軟性があると思います。
(MovieClipの形状を変えることで、柔軟に且つ視覚的に描画エリアを変更できるので)

インスタンス名についてですが、ステージ(画面)上に配置したムービークリップ等を
選択した状態の時に、プロパティの部分をみると、<インスタンス名>というのがあると思います。
これがそうです(こんな解説でいいのかよくわからないですが)。

joyさんのやりかたですと、
500x500の正方形(今回の場合)を描いたムービークリップを作成、
右側のボタンに重ならないように左側に配置して、
そのインスタンス名に draw と付けます。
その後、Res01で述べられているスクリプトをレイヤーに記述すると
うまくいくかと思います。
Response 04
2008年03月30日 (日) 13時51分> joy 
坊ちゃんさん、daniwellさん、
今日は。
daniwellさんのwebチラシの回答fla見て、凄〜いというか、口、あんぐり状態でしたので、お礼を言うの忘れてました。
daniwellさん、ありがとうございました!

坊ちゃんさん、
説明が不親切でしたね。
daniwellさんの仰る通りです。右につけるボタンレイヤーより、下層に、描画用のMovieClipを配置するレイヤーを追加し、そのMovieClipを、ステージ一杯に描き、ステージ上で、マウスをPressすれば、その都度、hanabiraが出現しますが、ボタンの下には、隠れると思います。試してみてください。
Response 05
2008年03月30日 (日) 15時36分> 坊ちゃん 
daniwellさん、joyさん。

初心者に懇切丁寧なご教授を戴き、誠にありがとうございます。
指示通り変更したところ、見事にクリックエリア内に描画できました。
心から厚くお礼申し上げます。

作品は参考書を傍に置いて見よう見真似で作っていますが、最終的には
8種類の花がクリック描画できるようになっており、アクションは下記
です。

var n = 0;
this.onMouseDown = function ()
{
  if ( _root._xmouse < 500 ) {
var _loc5 = Math.random() * 50 + 20;
var _loc6 = Math.round(Math.random() * 8 + 6);
var _loc7 = Math.floor(Math.random() * 8) + 1;
trace (_loc7);
for (var _loc4 = 0; _loc4 < _loc6; ++_loc4)
{
var _loc3 = this.attachMovie("hanabira", "hanabira" + n, n);
++n;
_loc3._x = _root._xmouse;
_loc3._y = _root._ymouse;
_loc3._xscale = _loc5;
_loc3._yscale = _loc5;
_loc3._rotation = 360 / _loc6 * _loc4;
_loc3.gotoAndStop(_loc7);
} // end of for
  }
};

ところが、数種の花が描画できるようにはなりましたが、エリア内をクリック
する度に何故か「出力」というダイアログが出て枠内に1、2、3・・・等の
数字が表示されます。数字は花びらの形(8種)を置いてあるフレームの数字
のようですが、アクションと何か関係あるのでしょうか?。

書き出しのvar n = 0;を削除すると描画自体出来なくなります。恐縮ですが、
修正方法を教えていただけないでしょうか。よろしくお願い致します。
Response 06
2008年03月30日 (日) 16時00分> joy 
坊ちゃんさん、
ご自分で、記載されたスクリプトが、出力させているスクリプトになってます。

var _loc7 = Math.floor(Math.random() * 8) + 1;//1〜8までの整数をランダムに発生させるスクリプトですね。
trace (_loc7);//この変数(varは、英語のvariablesの略で、variablesとは、日本語で、変数と訳します) _loc7を出力させるグローバル関数 trace();を記載してるので、1から8までの数値が、ランダムに出力されますが、スクリプト作成時のDebugに使いますので、ムービープレビュー時のみ、動作し、swfの再生時には、無視されます。

もし、嫌でしたら、
//trace(_loc7);とするか、これそのものを、削除下さい。

尚、
>書き出しのvar n = 0;を削除すると描画自体出来なくなります

変数 nの定義を無くすことですから、後半に、記載している++n等のnに関係することが、何のことやら、メソッド(attachMovie();等)が分からなくなるため、動かなくなります。
Response 07
2008年03月30日 (日) 17時07分> 坊ちゃん 
joyさん

再三再四ご指導戴き、心から感謝します。
無事修正できました。ありがとうございます。
今後ともどうかよろしくお願い致します。
Response 08
2008年04月01日 (火) 12時44分> 坊ちゃん   
daniwellさん、joyさんこんにちは。

過日は大変お世話になりました。意図した通りにでき喜んで
います。ところが欲が出まして・・・

描画したあと、右側に設置した「ボタン」を押すと、白紙に
なる、(描画以前の状態に戻す)ーー消しゴムで消すように
画面をクリアしたいのですが、素人の悲しさでアクションが
分かりません。

恐縮ですが教えていただけないでしょうか。よろしくお願い
致します。

このページの先頭へ