• 締切済み

線の描画

使用ソフトはFlashMX2004でMacOSXを使用しています。 線の描画なんですが、他の動きとの関係で マウス位置より85上に線を描画→描画の度に新しいMCを作る→最初に作られたMCから透明になって消える という流れを目指して制作しています。 表現の関係上、btとリンケージ名をつけたボタンを1度押し、離した時に描画位置を指定し、再びボタンを押した時に描画終了という動きをさせたいと思い、以前頂いたサンプルに手を加え var osi = 0; canvases = 0; bt.onPress = function() { canNum++; if (osi == 1 &&_root._xmouse>=28 && _root._xmouse<=470 && _root._ymouse>=22 && _root._ymouse<=500) { _root.createEmptyMovieClip("can"+canvases, canvases); _root["can"+canvases]._alpha = 50; _root["can"+canvases].lineStyle(4, 0xffffff); _root["can"+canvases].lineTo(_root._xmouse, _root._ymouse-85); _root["can"+canvases].onEnterFrame = function() { this._alpha--; if (this._alpha<1) { this.removeMovieClip(); } }; updateAfterEvent(); canvases++; osi = 0; }; bt.onRelease = function() { if (osi == 1 &&_root._xmouse>=28 && _root._xmouse<=470 && _root._ymouse>=22 && _root._ymouse<=500) { _root["can"+canvases].moveTo(_root._xmouse, _root._ymouse-85); } } }; というスクリプトをくみましたが描画されません。 私が手を加えた箇所が間違っているのでしょうか。 一応試行錯誤はしてみたんですが解決策が見当たらず・・・。 間違っていましたらご指摘お願いします。 また、解決策がありましたらご教授お願いします。 このスクリプトがてを加える前の状態です。 this.stop(); canNum = 0; var osi = 0; canvases = 0; bt.onPress = function() { canNum++; if (_root._xmouse>=28 && _root._xmouse<=470 && _root._ymouse>=22 && _root._ymouse<=500) { mX = _root._xmouse; mY = _root._ymouse; osi = 1; } else { osi = 0; } }; bt.onRelease = function() { if (_root._xmouse>=28 && _root._xmouse<=470 && _root._ymouse>=22 && _root._ymouse<=500) { if (osi>0) { _root.createEmptyMovieClip("can"+canvases, canvases); _root["can"+canvases]._alpha = 50; _root["can"+canvases].lineStyle(4, 0xffffff); _root["can"+canvases].moveTo(mX, mY); _root["can"+canvases].lineTo(_root._xmouse, _root._ymouse-85); _root["can"+canvases].onEnterFrame = function() { this._alpha--; if (this._alpha<1) { this.removeMovieClip(); } }; updateAfterEvent(); canvases++; osi = 0; } } }; 長くなってしまい申し訳ありません。

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

みんなの回答

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

そもそもなぜ変数 osi を出す必要があるのかわかりません。 その osi を出す必要があってもなくても とにかく変数 osi の管理把握が全くできていないところが一番の問題点だと思います。 最初  var osi = 0; これで osi の値は 0 ですよね。 その状態で bt を1回プレスしたとします。  if (osi == 1 &&_root._xmouse>=28 … もし osi が 1 であればこの if文 が実行されます。 osi は 0 であるから実行されません。 そして osi がどうであっても  osi = 0; が動作して osi の値は 0 になります。 次に bt が放されます。  bt.onRelease = function() {   if (osi == 1 &&_root._xmouse もし osi が 1 であればこの if文 が実行されます。 osi は 0 であるから実行されません。 つまり,何が何でも変数 osi の値は 0 です。 一方 if文 の方は何が何でも osi の値が 1 でなければ実行させません。 結局,描画に関しては何も実行されません。 あと, moveTo と lineTo が逆だと思います。 あと, updateAfterEvent(); は何も意味を成しません。 その他全体的にどうも不可解満載ですが, なるべく最小の修正をすると次のようになると思います。 var osi = 0; canvases = 0; bt.onPress = function() { canNum++; if (osi == 0 && _root._xmouse>=28 && _root._xmouse<=470 && _root._ymouse>=22 && _root._ymouse<=500) { _root.createEmptyMovieClip("can"+canvases, canvases); _root["can"+canvases]._alpha = 50; _root["can"+canvases].lineStyle(4, 0xffffff); _root["can"+canvases].moveTo(_root._xmouse, _root._ymouse-85); _root["can"+canvases].onEnterFrame = function() { this._alpha--; if (this._alpha<1) { this.removeMovieClip(); } }; osi = 1; } bt.onRelease = function() { if (osi == 1 && _root._xmouse>=28 && _root._xmouse<=470 && _root._ymouse>=22 && _root._ymouse<=500) { _root["can"+canvases].lineTo(_root._xmouse, _root._ymouse-85); } canvases++; osi = 0; }; };

libra_801
質問者

お礼

わかり辛い説明だったにもかかわらずご丁寧に説明して下さりありがとうございます。 その後試行錯誤した結果、 this.stop(); nowX = 0; nowY = 0; prevX = 0; prevY = 0; canNum = 0; var osi = 0; canvases = 0; bt.onPress = function() { canNum++; if (_root._xmouse>=28 && _root._xmouse<=470 && _root._ymouse>=22 && _root._ymouse<=500) { nowX = _root._xmouse; nowY = _root._ymouse; osi = 1; } else { osi = 0; } }; bt.onRelease = function() { if (_root._xmouse>=28 && _root._xmouse<=470 && _root._ymouse>=22 && _root._ymouse<=500) { if (osi>0) { if (prevX != 0 && prevY != 0) { _root.createEmptyMovieClip("can"+canvases, canvases); _root["can"+canvases]._alpha = 50; _root["can"+canvases].lineStyle(4, 0xffffff); _root["can"+canvases].moveTo(prevX, prevY); _root["can"+canvases].lineTo(nowX, nowY); _root["can"+canvases].onEnterFrame = function() { this._alpha--; if (this._alpha<1) { this.removeMovieClip(); } }; } prevX = nowX; prevY = nowY; canvases++; osi = 0; } } }; というスクリプトで表示させたい描画が出来ました。 とても勉強になりました。 どうもありがとうございました!!

関連するQ&A

  • このスクリプトでIFが意味を為さないのはなぜですか?

    このスクリプトでIFが意味を為さないのはなぜですか? フリーソフトのSuzukaでマウスでドラッグして絵を描くものを作っています 基本的にはAdobeのものと同じのようです AS3です ウィンドウの左上に張り付いた300*300のマスのなかにだけ書けるようにしたく、 if(0<=_xmouse<=300 && 0<=_ymouse<=300) と加えたのですが全く変化が感じられません 何故でしょうか? if(0<=_xmouse && _xmouse<=300 && 0<=_ymouse && _ymouse<=300)としても変わらず、 ダイナミックテキスト及びトレースで _xmouse, _ymouse が0以上300以下であることを確認しています if以外の間違いということはないと思うのですが・・・ 以下スクリプトです タブを全角スペース2つに置き換えています this.onMouseDown = function(){   //直線を定義 太さ:5,濃紺   lineStyle(5,0x0000BB);   //始点を定義   moveTo(_xmouse,_ymouse);   zahyo.text = "x,y = " + _xmouse + ","+ _ymouse;   //画数に+1   h += 1;   //マウスを動かしたら   onMouseMove = function(){     //現在の座標まで描画     lineTo(_xmouse,_ymouse);     //テキスト同期     zahyo.text = "x,y = " + _xmouse + ","+ _ymouse;     //配列の最後尾に追加     this["xh"+ h + "list"].push( _xmouse );     this["yh"+ h + "list"].push( _ymouse );   };   //マウスが上がったら   onMouseUp = function(){     //描画終了     delete onMouseMove;     //配列をトレース     trace( this["xh"+ h + "list"] );     trace( this["yh"+ h + "list"] );     //次の配列を定義     this["xh"+ (h+1) + "list"] = new Array();     this["yh"+ (h+1) + "list"] = new Array();   }; }; よろしくお願いします

    • ベストアンサー
    • Flash
  • Flashスクリプト

    マウスで画面がスクロールするというものをダウンロードして画面サイズとスクロールスピードを変更し使いたいと思っているんですが、スクリプトがわからず数値をどう変えたらよいかわかりません。 わかりにくいと思うんでますが、どの値が何を動かしているのかわかれば結構です。教えてください。 ◆alp = getProperty("/photo",_alpha)  if (alp>=100) { setProperty("/photo",_alpha,100);  }  setProperty("/photo",_alpha,alp+10); ◆cursorpos_x = _root._xmouse;  cursorpos_y = _root._ymouse;  if (_root._xmouse >0 && _root._xmouse < 150) { pos = getProperty("/photo",_x)+5; if (pos < 240) { setProperty("/photo",_x,pos);  }  }  if (_root._xmouse > 250 && _root._xmouse <    400) { pos = getProperty("/photo",_x)-5; if(pos > -240) { setProperty("/photo",_x,pos);  }  } ◆alp = getProperty("/photo",_alpha)  if (alp<40) { setProperty("/photo",_alpha,40);  }  setProperty("/photo",_alpha,alp-10);

    • ベストアンサー
    • Flash
  • マウス 追従 範囲外

    マウスを追いかけるMCを以下のように設定しましたが、 MCが動いている範囲外にマウスがいるときは追いかけるのを やめにしたい場合どのように記述すればよろしいでしょうか。  onClipEvent (mouseMove) { if (_root._xmouse >左 && _root._xmouse <右) { this._x = _root._xmouse; } if (_root._ymouse >上&& _root._ymouse <下) { this._y = _root._ymouse; } } 範囲外にマウスがいるときは定位置にmcを表示させるか、 表示を消したいです。 ちなみにmcが動く範囲の指定方法はネット上から探してきました。 別の方法でもっと適した記述があれば教えてください。

  • ドラッグ中の回転を止めたいのですが…

    ドラッグができて,なおかつクリックすると90度回転するようにするため,サンプル集を見てムービークリップ(sikaku_mc)に 次のようなアクションスクリプト(以下AS)を書きました。 もともと解説にあったのですが,これだとドラッグしている最中も 回転してしまいます。クリックすると回転しても ドラッグしているときは回転しないようにするためにはどうすればいいでしょうか。 ちなみにこのASはムービークリップ(sikaku_mc)の編集画面のタイムラインに書き込んだものです。 function onPress() { this.startDrag(false); var xm:Number = this._xmouse; var ym:Number = this._ymouse; this._x = _root._xmouse; this._y = _root._ymouse; sikaku_mc._x -= xm; sikaku_mc._y -= ym; this.onEnterFrame = mawasu; this.onMouseMove = updateStage; } function updateStage() { updateAfterEvent(); } function mawasu() { this._rotation += 90; } this.onRelease = this.onReleaseOutside=stopDragMe; function stopDragMe() { this.stopDrag(); delete this.onEnterFrame; delete this.onMouseMove; } ご教授よろしくお願いします。

    • ベストアンサー
    • Flash
  • onEnterFrameの中止

    お世話になります。 1フレームには下記のようにマウスに追従させています。 function moveCross() { this._x = _root._xmouse; this._y = _root._ymouse; } closs.onEnterFrame = moveCross; 1フレームのメニューから2フレームに進んだ時に、この追従をさせないようにしたいのですが できません。delete onEnterFrameを使えばいいとわかったのですが。 すみませんが、教えてください。

    • ベストアンサー
    • Flash
  • 右回り、左回りの判定

    ムービークリップをドラッグし、右回転させている間はAの処理、左回転させている間はBの処理という判定の仕方がわからなくて困っています。 イメージとしてはターンテーブルのようなものです。 現在はムービークリップをドラッグし、右・左回転させるところまでは出来ています。 何かヒント・考え方で結構ですので、ご教授頂けないでしょうか。 下記に現在記述しているスクリプトを記載します。 root階層にインスタンス名"handle"というムービークリップを配置し、Iフレーム目に下記のスクリプトを記述。 handle.onPress = function():Void { if (this.hitTest(_root._xmouse, _root._ymouse, true)) { this.flag = true; } }; handle.onMouseMove = function():Void { if (this.flag == true) { xp = _root._xmouse-this._x; yp = _root._ymouse-this._y; rad = Math.atan2(yp, xp); degree = rad*(180/Math.PI); this._rotation = degree; } }; handle.onMouseUp = function():Void { this.flag = false; }; 宜しくお願いします。

    • ベストアンサー
    • Flash
  • 揺れるスクリプトについて

    こちらで教えていただいたサイトで揺れるスクリプト を勉強していたのですが、 ■をMCにして、  onClipEvent (load) {    this._xscale = this._yscale = 0;    function sMove(mScale,acc,conv) {      theScale = theScale*acc+(mScale-this._yscale)*conv;      this._xscale = this._yscale += theScale;    }  }  onClipEvent (enterFrame) {    if (this.hitTest(_root._xmouse,_root._ymouse,1)) {      sMove(130,0.8,0.2);    } else {      sMove(100,0.8,0.2);    }  } と書いたのですがプレビューすると真っ白なままなにも 表示されません。 なぜなのでしょうか?

    • ベストアンサー
    • Flash
  • 外部swfを読み込んだときだけMouse.hide();させたい。

    よろしくお願いします。 ドキュメント上に空のムービークリップを作り、その中の入れ子のボタンを押すと外部swfを表示するflashを作ったのですが、その外部swf、仮にhoge.swfを読みこんで、そのときだけマウスを隠して(ムービークリップをマウス代わりに)、ボタンで違う外部swf、仮にogeをよみこんだときはマウスを表示させることは可能でしょうか? onClipEvent (enterFrame) { this._x=_root._xmouse; this._y=_root._ymouse; Mouse.hide(); } 上記のスクリプトでマウスを消すと、ogeを読み込んでもマウスが消えっぱなしです。 多分if文を使って if (hogeを読み込んだら){ this._x = _root._xmouse; this._y = _root._ymouse; Mouse.hide(); } //そうでなかったら、 else { Mouse.show(); } みたいな感じなのでしょうが、うまく機能しません・・・。 ご教授お願い致します。

    • ベストアンサー
    • Flash
  • Flash/オブジェクトの指定のしかた

    いつもお世話になっております。 FlashでActionScriptを使って、 異なるオブジェクトを、同じメソッドで 連続的に処理する仕方について質問です。 やりたいこと・・************************* オブジェクトをいくつか複製して、 Resetボタンをクリックすると、 複製したオブジェクトが全てきえる、 というスクリプトを組みたいと考えています。 ************************************** 具体的には以下のように、 duplicateMovieClip()でオブジェクトを複製します。 次に、resetボタン(ボタンオブジェクト)に、 removeMovieClip()メソッドで複製したオブジェクトを 削除します。 メソッドは以下のようにしています。 一気にすべてを消したいために、 For文でremoveMovieClip()メソッドを 実行しようとしています。 removeMovieClip()メソッドを実行させる、 オブジェクトの指定に、 変数を使おうとしましたが、 とれませんでした。(以下参照) function removePoint() {  i = 1;  for (i = 1; i < pointFlg+1; i++){   RemoveObj = "newMc" + i;   _root.RemoveObj.removeMovieClip();  } } 異なるオブジェクトでメソッドを、一気に実行させる、 よい方法はご存知ないでしょうか? サンプル*********************************** function DuplicatePoint(){  pointFlg ++;  var newMcName = "newMc" + pointFlg;  var newLevel = pointFlg;  this.duplicateMovieClip(newMcName, newLevel);  _root.cursol.swapDepths(999);  _parent[newMcName]._x = _parent._xmouse;  _parent[newMcName]._y =_parent._ymouse; } function removePoint() {  i = 1;  for (i = 1; i < pointFlg+1; i++){   RemoveObj = "newMc" + i;   _root.RemoveObj.removeMovieClip();  } }

  • FlashCS5 ActionScript2.0で3つのボタンを制御し

    FlashCS5 ActionScript2.0で3つのボタンを制御しています。 それぞれインスタンス名はbt1,bt2,bt3です。 動きはマウスオーバーで120%大きくなり、ロールアウトで100%へと戻るものです。 しかし、ロールアウトの動作中に他のボタンに触ると、ロールアウトの動作が中断してしまいます。 なぜでしょうか? //////////////////////////////////////// stop(); sx = 3; var i; //----------- for( i = 1; i < 4; i++){ Nov = "bt" + i; _root[Nov].onRollOver = function(){ Name = this._name; btOverMotion(Name); } _root[Nov].onRollOut = function(){ Name = this._name; btOutMotion(Name); } } //----------- function btOutMotion(eachNo){ No = eachNo; onEnterFrame = function(){ if(_root[No]._xscale < 100){ delete this.onEnterFrame; }else{ _root[No]._xscale -= sx*2; _root[No]._yscale -= sx*2; } } } //----------- function btOverMotion(eachNo){ No = eachNo; onEnterFrame = function(){ if(_root[No]._xscale > 120){ delete this.onEnterFrame; }else{ _root[No]._xscale += sx; _root[No]._yscale += sx; } } }

    • ベストアンサー
    • Flash

専門家に質問してみよう