• 締切済み

シューティングゲームの自機の当り判定

以前の質問で、アクションスクリプトの記述がなかったので、詳しく説明します。http://oshiete1.goo.ne.jp/qa3535566.html 自機は、キーボードで操作します。 if(Key.isDown(87)){ gotoAndPlay(3) } if(Key.isDown(83)){ gotoAndPlay(5) } 3は上向きグラフィック、5は下向きグラフィックです。 246フレームには、 gotoandplay(1) と記述しています。 当たり判定は、別レイヤーにあります。 ステージ上の自機にmyshipというインスタンス名を付けています。 敵弾に当たると自機はbangjikiになります。 if(this.hitTest(_root.myship.hitarea)){ _root.myship.gotoAndPlay("bangjiki") _parent.removeMovieClip() }

みんなの回答

  • notebleu
  • ベストアンサー率45% (34/74)
回答No.1

明確な理由はわかりませんが、 ・インスタンス名 ・深度 ・パス を確認してみてください。 if(this.hitTest(_root.myship.hitarea)){中略} これは動的に生成した敵弾の中のMCに書いてあるのでしょうか? 自信ありませんが、この生成と削除が怪しい気がします。

arikay
質問者

お礼

回答ありがとうございます。 自機の動きのフレーム数を増やしたところ解決しました。 また、わからない事があったときにはよろしくおねがいします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 当たり判定で一度だけ音をならすには

    当たり判定で、下記の様に書きました。 I_blueは青ボールインスタンス名、I_green 緑ボール インスタンス名です。 緑ボールをドラッグ&ドロップで青ボールに重ねると音がでるというものを作ろうとしています。 // Hsound01 = new Sound(_root.I_blue); Hsound01.attachSound("HS_sound01"); // _root.I_blue.onEnterFrame = function() { if (this.hitTest(_root.I_green)) { _root.Hsound01.start(0, 1); } }; // I_green.onPress = function(){ startDrag(this,false); } I_green.onRelease = function(){ stopDrag(); } ですが、これだと音が繰り返し再生されてしまいます。 当たり判定で一度だけ音をならすには、どのようにすべきでしょうか。 お知恵をお貸しいただけたらと思います。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • ドラッグしたときの当たり判定

    ParaFlaを使ってFlashを制作しています aというスプライトをドラッグし bというスプライトにぶつかったらラベルCに飛ぶ というものを作りたいのですがうまくいきません aに記述しているアクションスクリプト on (press) { this.startDrag (true); } - on (release,releaseOutside) { this.stopDrag (); } - onClipEvent (enterFrame) { if(this.hitTest(_root.b) == true) { this.gotoAndPlay("c"); } } - onClipEvent (mouseMove) { updateAfterEvent(mouse); } バージョンはSWF8です ドラッグはできるのですがbとぶつかっても 何も起こりません bには何も記述していません どこを変更すればよいかわかる方 よろしくお願いします

    • ベストアンサー
    • Flash
  • 良いソースの書き方について(複数のインスタンスをまとめてヒットテストする方法)

    ■例文: ---------------------------------------------------------------- onClipEvent (enterFrame) { if ( this.hitTest(_root.char1)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char2)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char3)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char4)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char5)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char6)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char7)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char8)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char9)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char10)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char11)) { _parent.nextFrame(); } } ---------------------------------------------------------------- 上記は、_root.char1 から_root.char11までインタンス名をつけたムービークリップとのヒット確認をするアクションスクリプトです。 こういう動作をしたい場合。 for文を駆使する等で、ソースを短くまとめる方法はありませんでしょうか。 いい案がありましたら、是非ご教授の程宜しくお願い致します。

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

    suzukaでFlashを制作しております。 プログラムはさっぱりなので検索して出てきたactionscriptを切り貼りして試している状況です。 その1.フレームアクションにおいて、キーを押したら特定のフレームまで移動するスクリプトを入れたいので20フレーム目に以下のスクリプトを入れたのですが、どちらも使えませんでした。具体的な解決策はありますでしょうか。 ●[parse error]とエラーが出る this.stop(); on(keyPress ("a")){ _root.gotoAndPlay(21); } ●キーを押しても何も起こらない this.stop(); if(Key.isDown(Key.RIGHT)){ _root.gotoAndPlay(21); } else if(Key.isDown(Key.LEFT)){ _root.gotoAndPlay(31); } その2.フレームアクションの10フレーム目に this.stop(); buttonA.onPress=function(){ _root.gotoAndPlay(11); }; とボタンのスクリプトを入れると、 どこのフレームまで移動しようが 同じボタンへの命令で上書きするまで このボタンへの効果が持続されてしまうのですが、 押した瞬間に後に命令を引き継がせないスクリプトの記述はありますか?

    • ベストアンサー
    • Flash
  • 【Key.isDown】

    なんにもインスタンスを持たない【MC】を つくって、下記のソースを実行。 onClipEvent (enterFrame) { if (Key.isDown(Key.UP)) { _y -= 1; // 上に移動 } } そうすると↑キーを押すと【MC】が移動するのですが 本来やりたいことの動作確認でしかなく、 gotoAndPlay();を使うのが目的で 別に移動機能は無いものと考えてもらいます。 onClipEvent (enterFrame) { if (Key.isDown(Key.UP)) { gotoAndPlay("label"); } } フレームの移動をさせるにはどうすればいいのですか?? 教えてください><

    • ベストアンサー
    • Flash
  • インスタンス名の変更mcどうしのhittest

    お世話になります。Flash,actionscriptの初心者です。 現在actionscript2.0でちょっとしたFlashコンテンツを作っているのですが、解決できない ことがあり、ぜひお知恵を拝借できればと思います。 詳しくは添付図をご覧いただきたいのですが、 A1_mcとB1_mcのムービークリップをhittestで衝突判定させ、 B1_mcは見えないようにし、 A1_mcはgotoAndPlay(2)で2フレーム目にします(☆の絵)。 同時にthis._name="C1_mc"でインスタンス名を変更しました。 (ここまでは大丈夫で、trace(this._name)でも変更が確認できる。) 同じようにA2、B2、C2も設定しました。 そして、姿(○⇒☆)とインスタンス名(A⇒C)と変わった C1_mcとC2_mcをhittestで衝突判定させてD_mc(■)を見えるようにしたいのですが、 何も起きず、hittestが発動していないのではと思ってしまいます。 説明がわかりにくいと思うのですが、インスタンス名を変更した物どうしのhittestを うまく発動させるにはどうしたらよいか、教えていただきたいのです。 にわか知識のためFlashやactionscriptの根本的な問題を理解できてなさそうです・・・。 ちなみに何がやりたいかというと、○と○、○と☆ではお互いに反応しないが、 ○と◇が合体して☆になったもの同士(☆と☆)が接触すると、反応して■が出現する・・・ そんなFlashを作りたいのです。 自分の現状のやり方以外でこれが実現できるのなら、それでも大歓迎です。 長文になりましたが、ぜひともよろしくお願いいたします。 <参考・・自分の組んだAS> A1_mc.onEnterFrame = function() { if (this.hitTest(_root.B1_mc))     { _root.B1_mc.gotoAndPlay(2); //2フレーム目(空のキーフレーム)にとび、B1を消す this.gotoAndPlay(2);  //○⇒☆(2フレーム目)に姿を変える this._name="C1_mc"; //インスタンス名をA1_mcからC1_mcに変える     trace(this._name); //インスタンス名の変更を確認する。 delete this.onEnterFrame;     } else{ } }; A2_mc.onEnterFrame = function() { if (this.hitTest(_root.B2_mc))     { _root.B2_mc.gotoAndPlay(2); //2フレーム目(空のキーフレーム)にとび、B1を消す this.gotoAndPlay(2);  //○⇒☆(2フレーム目)に姿を変える this._name="C2_mc"; //インスタンス名をA2_mcからC2_mcに変える     trace(this._name); //インスタンス名の変更を確認する。 delete this.onEnterFrame;     } else{ } }; C1_mc.onEnterFrame = function() { if (this.hitTest(_root.C2_mc))     {     this.visible = false ; //姿を消す _root.C1_mc.visible = false; _root.D_mc.gotoAndPlay(2); //D_mcの出現(D_mcの1フレーム目は透明で見えなくしている。2フレーム目からアニメーションさせたいのでvisibleは使わない)     delete this.onEnterFrame; }   else{ } };

    • ベストアンサー
    • Flash
  • Flashのキーボード操作で

    キーボードのテンキーでコマンドを選択するアクションスクリプトをくんでいるのですが・・・・・ onClipEvent (keyDown) { if (Key.isDown(Key.UP) or Key.isDown(Key.DOWN)) { this._y += 30; } else if (Key.isDown(Key.UP) or Key.isDown(Key.DOWN)) { this._y = -30; }else if (Key.isDown(Key.LEFT) or Key.isDown(Key.RIGHT)){ this._x = +50; }else if (Key.isDown(Key.LEFT) or Key.isDown(Key.RIGHT)){ this._x = -50; } if (Key.isDown(Key.SPACE)) { _root.flag = 1; } } というアクションスクリプトを組むと上下はうまく移動するのですが横移動がうまくいきません。いきなり予期しないところに移動してしまったりしてしまいます・・・・。

    • ベストアンサー
    • Flash
  • 障害物に対する衝突判定

    こんばんは。WinXP、Flash8Proにてオーサリングしています。 hitTestにて衝突判定を行っているのですが、 RPGの場合、キャラクターが障害物に衝突する際の 処理に頭を悩めております。 _global.obje_hit=function(){ if(_global.key_cord=='d'){ _root.main_mc.player_mc._x -= 20; }else if(_global.key_cord=='a'){ _root.main_mc.player_mc._x += 20; }else if(_global.key_cord=='w'){ _root.main_mc.player_mc._x += 20; }else if(_global.key_cord=='s'){ _root.main_mc.player_mc._y -= 20; } _root.main_mc.player_mc.gotoAndPlay(1); } *キャラクターの移動は他のFunctionにて キー入力により、ASで位置やMCの動きを制御しています。 W,S,A,Dのそれぞれのキーで上下左右の向きのMCを再生させて、場所移動によって動かしているのですが、 現時点では、プレイヤーのMCが障害物と反発する事でしか、障害物による静止処理ができていません。 跳ね返らずに、一般的なRPGの様に”行き止まる”様にしたいのですが、 ASだけでするには、どのようにしたら良いのでしょうか。 やはり、キャラクターの行動しているMCから調節しなくてはいけないのでしょうか。 どうぞ宜しくお願い致します。

    • ベストアンサー
    • Flash
  • 複数のmcに同じイベントを記述したら、1つしか反応しない

    うまくいかない原因がわからず困っています。 画面上の複数のmcに同じイベントを記述しました。 内容はシンプルで、「mc01にマウスがのったらフレームf01に移動する、 マウスが離れたらフレームstartに戻る」というものです。 mc02はf02へ、mc03はf03へ移動というふうにします。 これをmc01からmc07まで順番に書いていったところ mc07は反応するのですが、あとの6つが反応しません。 mc07の記述を消すとmc06が反応するようになり、 どうやら一番最後に記述している部分しか反応しないようです。 これ↓がそれぞれのmcに書いてるASです。 ---------------------------------------------------------- onClipEvent (enterFrame) { if (_root.mc01.hitTest(_root._xmouse,_root._ymouse,1)) { _root.gotoAndPlay("f01"); } else { _root.gotoAndPlay("start"); } } ---------------------------------------------------------- ちなみにFlash8使用、プレイヤー8でパブリッシュしてます。 どうぞよろしくお願いします。

    • ベストアンサー
    • Flash
  • 衝突している間、違うポーズに変えたい

    いつもありがとうございます。MAXOS10でFlash8です。 障害物に衝突している間は、違うポーズにしたいのでhitTestを使って以下のようなスクリプトを障害物のmcに入れました。 衝突すると、泳ぐ人は立ち上がるポーズになるのですが、その後、障害物がなくなっても立ったまま、泳いでいってしまいます。 ポーズは、泳ぐ人のmcに複数作ってフレーム移動で変えています。 衝突していた、障害物がなくなったら元のように泳いでほしいのですが、 うまくいきません。よろしく、お願いします。 onClipEvent (enterFrame) { tmp = this.hitTest (this._parent._parent.swim_02); if (tmp == true) { _parent._parent.swim_02.gotoAndPlay ("gool"); _parent._parent.swim_02._x = this._x; } }