• 締切済み

線の描画

使用ソフトは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; } } }; 長くなってしまい申し訳ありません。

みんなの回答

  • 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

専門家に質問してみよう