• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ActionScriptで思うような動きを出せず、困っています)

ActionScriptで思うような動きを出せず、困っています

noname#35109の回答

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

最小変更で行くと, 次のようになると思います。 ----------------------------- maru1.Gox = 700; maru1.Goy = 25; flg = false; maru1.onEnterFrame = function() { this._x += (maru1.Gox-this._x)/10; if (this._x>=650) { maru1.Gox = 35; flg = true; } if (flg == true) { this._y += (maru1.Goy-this._y)/10; } }; -------------------------- 単に if(flg = ture) が致命傷なだけだと思います。 「=」 は代入演算子です。 flg が true であるかどうかを判定させるのですから, 「==」 の等価演算子を使う必要があります。 また, 「ture」が綴り間違いで,「true」ですね。 また,if( ){ } は,( ) 内が true であるか false であるかを判定し, ( )内が true であれば,続く中カッコ { } 内のステートメントを実行します。 したがって, if (flg == true) { ~ } と書くのではなく, if (flg) { ~ } と書くのが一般的です。 if (flg == true) と書くと, 「もし flg の値が true であるという条件が true であると…」 という回りくどい判定文となります。 ちなみに, if (flg == false) { ~ } を書きたい場合は, if (!flg) { ~ } となります。 「!」 は論理否定 (NOT) 演算子 です。 あと最初の,onLoad = function() という無意味なものを取りました。

cropuis
質問者

お礼

>>sassakunさん 早速のご回答誠にありがとうございます。 本当に分かりやすいご説明で、trueとfalseの部分の、疑問も解けました!! 早速、ご指定いただいた、箇所を修正致しましたところ、問題は改善されました。 もしよろしければもう一点、質問をさせていたいてもよろしいでしょうか。 onLoad = function()の部分についてなのですが、今回のような場合であれば、 maru1.Gox = 700; maru1.Goy = 25; flg = false; などを定義する場合、onLoad = function()が必要だと間違った解釈をしていたのですが、 実際にonLoad = function()を使用するのはどういったときなのでしょうか? 文章がお粗末な上に、曖昧な質問で申し訳ありまん。 助言を頂ければ幸いです。 どうぞよろしくお願い致します。

関連するQ&A

  • [Flash]actionscript2.0を用いて歯車を作りたいのですが

    Adobe FLASH CS2を使い2つのかみ合った歯車を制作しています。 ドラッグで片方の歯車を回転させると もう片方の方は逆回転になるはずですが、 うまいことactionscriptをかくことができません。 片方はこのようなactionscriptを使っているのですが うまい作り方はないでしょうか。 よろしくおねがいします。 on (press) { //このMCの基準点からのマウス座標を取得 rx0 = _root._xmouse-this._x; ry0 = _root._ymouse-this._y; //このMCの基準点とマウスとの距離を算出 td0 = Math.sqrt(rx0*rx0+ry0*ry0); //マウスによる回転の差分を算出 tr0 = (Math.PI/2+Math.atan2(ry0, rx0))*180/Math.PI-this._rotation; //onEnterFrame を定義 this.onEnterFrame = function() { //現在のMCの基準点からのマウス座標を取得 rx1 = _root._xmouse-this._x; ry1 = _root._ymouse-this._y; //このMCの回転を計算 this._rotation = (Math.PI/2+Math.atan2(ry1, rx1))*180/Math.PI-tr0; //このMCの移動を計算 }; } on (release, releaseOutside) { //この onEnterFrame を削除 delete this.onEnterFrame; }

  • 吸着後の事

    吸着後についてわからない事があります。 ドラッグ&ドロップでmaru_mcをsikakuというMCに吸着させています。 sikakuというMCに衝突していない時は指定座標に戻るようにしているのですが、二点うまくいかないところがあります。 吸着後、maru_mcをsikakuから離す時、maruがその場を動こうとしない時があり、すんなりドラッグできない。 maru_mcが、衝突していない時でも指定座標にもどらず、sikakuに吸着してしまう時があります。 改善点等たくさんあるとおもいますが、よろしくお願いします。 下記スクリプトです。 maru_mcのスクリプト on (press) { this.startDrag(); this.onEnterFrame = function() { if (this.hitTest(_root.sikaku)) { this._x += (_root.sikaku._x-this._x)/4; this._y += (_root.sikaku._y-this._y)/4; } }; } on (release, releaseOutside) { this.stopDrag(); this.onEnterFrame = function() { if (!this.hitTest(_root.sikaku)) { this._x += (400-this._x)/6; this._y += (300-this._y)/4; } else { this._x += (_root.sikaku._x-this._x)/4; this._y += (_root.sikaku._y-this._y)/4; } }; }

  • フェードインから反転のアニメーション:actionscript

    ActionScriptでランダムに画像を読み込んだ状態でランダムフェードインして、ランダム秒数後に反転する。 反転すると違う画像がランダムに読み込まれていて、そしてまたランダム秒数後にまた反転してひっくり返るとまたランダムに画像が読み込まれているという、変わったアニメーションを作りたいのですが。(下の図を参照してください。) 現在ここまで↓できていて、xscaleを使えばできそうな感じなのですが、どうスクリプトを組めばよいかわかりません、どなたか教えてください。 環境;Flash 8,ActionScript2.0 ------------------------------------------------------------------- 回転させるparent_mcの1フレームに記述: // フェードイン設定 var load_time:Number = getTimer(); var wait_time:Number = Math.random()*1000; this._alpha = 0; // 反転タイマー関数 function InversionTimer() { flg++; } // ランダム秒設定 var max_sec:Number = 9; var min_sec:Number = 4; var random_sec:Number = Math.floor(Math.random()*(max_sec-min_sec+1))+min_sec; // フラグ変数 var flg:Number = 0; // MCのスケール関係 var scale:Number = 100; var scale_spd:Number = 8; this.onEnterFrame = function() { if (load_time+wait_time<getTimer()&&flg==0) { this._alpha += 2; if (this._alpha>99) { this._alpha = 100; flg = 1; setTimeout(InversionTimer, random_sec*1000); } } if (flg==2) { this.loader._xscale = scale; scale -= scale_spd; if (scale<=0) { scale = 0; this.child_mc.unloadMovie(IMG); flg = 3; } } else if (flg==3) { ???????????? } };

    • ベストアンサー
    • Flash
  • 素早い動き

    現在スロットのゲームを作っていまして、 リールの回転中はなんとなく回ってるっぽい絵を揺らして表現していたのですが、 これを実際のリールが回っているようにしたいと思っています。 今は、以下のように絵柄を並べてそれぞれonEnterFrameでthis._y+=30などとし、 this._yがある程度大きくなったら上に戻して回転しているように見せる、という方法で動かしています。 kaiten_1.onEnterFrame = function(){ this._y += 30; if(this._y > 325.9){ this._y = -714.1; } } これはこれでちゃんと動くのですが、3リールを回したときに、 昔のシューティングゲームで画面に弾が多くなったときのように 動きが遅くなってしまいます。 リールをストップボタンで止めていくと、残ったリールの回転速度は上がります。 swf自体の容量は100kb以下とそんなに重くもないので 原因がよくわかりません。 これを解決する方法はわかりますでしょうか? もしくは今やっている方法の他に、この動きを実現する方法があれば教えていただけますでしょうか?

    • ベストアンサー
    • Flash
  • 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
  • actionscript2のクラスの中の書き方について

    Flash ActionScript2のクラスの中の書き方について悩んでいます。 クラスの中にMcを定義するものですがthis.mct.onPressのところで class testAの中の_move()が実行できません。いろいろ試してみました がうまく実行できませんでした。なにかいいやり方はないでしょうか? よろしくお願いします。 class testA{  var mct:MovieClip;  function testA(mct:MovieClip){   this.mct = mct;   this.mct.onPress = function(){    _parent._move();   }  }  function _move(){    this.mct.onEnterFrame = function(){   }  } }

    • ベストアンサー
    • Flash
  • Actionscriptでのフレーム間の移動

    // ここで実際に○を移動させる Pofmaru1(l); Pofmaru2(r); // maru1を移動させる関数Pofmaru1 function Pofmaru1(l) { if (l == 1) { gotoAndPlay("maru1",2); }else if (l == 2) { ・・・・・・ // maru2を移動させる関数Pofmaru2 function Pofmaru2(r) { if (r == 1) { gotoAndPlay("maru2",2); }else if (r == 2) { ........ maru1を移動させる処理を呼んで、gotoAndplayでmaru1レイヤーの2フレーム目へ飛び、2フレーム目が再生されたら、次にクイックソートのプログラムに戻り、関数 Pofmaru2(r); を処理するようにしたいのですが、うまくいきません。C言語であれば普通if文の処理がされたら自動でプログラムに戻ってきて、Pofmaru2(r);の処理へ移ると思うのですが....Actionscriptはそうならないのでしょうか? ネットや本などで色々調べてみたのですが解決策が見つからず行き詰ってしまって困っています。 flash mxでプログラム通りにフレーム間を移動するようにするのは無理なのでしょうか?

  • onEnterFrameで予定の位置で止まってくれない。

    http://www.icnet.ne.jp/~ang74g5c/ ↑このようなものを作ってみました。 フラッシュのサイズは800×600px。 一つの色のパネルの大きさも800×600pxで、様々な色を合わせて3行3列で合計9個のパネルを並べたものをイラストレータで作成してフラッシュに入れ、インスタンス名はcolorpannel(基準点は左上)としました。 右上の番号を押すと想定の位置で止まるようにしたいと思い、フレームに以下の設定をしてみました。 (右上の番号にはそれぞれnum1~num9までのインスタンスネームをつけています。) ------------------------------------- num1.onRelease = function() { _root.onEnterFrame = function() { if (_root.colorpannel._x>=0) { _root.colorpannel._x -= 30; } if (_root.colorpannel._x<=0) { _root.colorpannel._x += 30; } if (_root.colorpannel._y>=0) { _root.colorpannel._y -= 30; } if (_root.colorpannel._y<=0) { _root.colorpannel._y += 30; } }; }; num2.onRelease = function() { _root.onEnterFrame = function() { if (_root.colorpannel._x>=-800) { _root.colorpannel._x -= 30; } if (_root.colorpannel._x<=-800) { _root.colorpannel._x += 30; } if (_root.colorpannel._y>=0) { _root.colorpannel._y -= 30; } if (_root.colorpannel._y<=0) { _root.colorpannel._y += 30; } }; }; num3.onRelease = function() { _root.onEnterFrame = function() { if (_root.colorpannel._x>=-1600) { _root.colorpannel._x -= 30; } if (_root.colorpannel._x<=-1600) { _root.colorpannel._x += 30; } if (_root.colorpannel._y>=0) { _root.colorpannel._y -= 30; } if (_root.colorpannel._y<=0) { _root.colorpannel._y += 30; } }; }; (以下、num9まで座標位置が変わったものだけを記述していますので省略します。) ------------------------------------- URLを見ていただくとわかるように、各色の止まる位置が微妙にズレて隣の色が見えてしまっているのです。 OnEnterFrameなので、座標位置を指定してdeleteで止めれば良いのかな?とは思っているのですが、その書き方もよくわかりません。 どなたか、おわかりにある方がいらっしゃいましたら教えていただけませんでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • gotoAndPlayされないです

    はじめてFlashを作ります。 "ATTACK1"と"ATTACK2"のフレームを0.2秒の間隔で10回交互に表示したあと、 "ATTACK3"と"ATTACK4"のフレームをenterが押されるまで交互に表示する というプログラムを作りたいのですが、 "ATTACK1"と"ATTACK2"のフレームを交互にずっと表示されるだけで、 ATTACK3へ移動しません。 "ATTACK1"というラベルのフレームに以下のように書きました。 ActionScript2.0でやっています。 どこが悪いのか教えてください。お願いします。 ATTACK1フレームのActionscript var timeCount = true; var endTime = getTimer()+0.2*1000; stop(); onEnterFrame = function() { if( timeCount ){ time = Math.ceil((endTime-getTimer())/1000); if( time <= 0 ){ timeCount = false; if( count >= 10 ){ gotoAndPlay("ATTACK3"); count=0; delete this.onEnterFrame(); } gotoAndPlay("ATTACK2"); count=count+1; delete this.onEnterFrame(); } } }; ATTACK2フレームのAcctionscript var timeCount = true; var endTime = getTimer()+0.2*1000; stop(); onEnterFrame = function() { if( timeCount ){ time = Math.ceil((endTime-getTimer())/1000); if( time <= 0 ){ timeCount = false; gotoAndPlay("ATTACK1"); delete this.onEnterFrame(); } } };

    • ベストアンサー
    • Flash
  • ActionScript

    ActionScript3.0でムービクリップ(たとえば丸)をA点からB点に移動し、その後C点、さらにD点という具合に移動させたい場合、どのようにスクリプトを書くのが一般的なのでしょうか?やはりif文などを使うのでしょうか? ものすごく初歩的なことのようですが、わからずにいます。何卒よろしくお願いします。

    • ベストアンサー
    • Flash