質問ページ2 / 207


質問ページ2 / 207

質問ページ2/207

概要当たり判定について
投稿者Parafla Quality
状態
カテゴリーParaFla!
投稿日2008-10-09 (木) 22:34:08
バージョン1.37

質問内容

ファイル同士(ファイル+マウスでなく)をインスタンスとしたときに、インスタンスが四角形として扱われることなく当たり判定を取る、ということは可能なのでしょうか? シューティングゲームで光線(角度を調節したもの)と自機が接触していないのに当たり判定が取れてしまい、ライフが減ってしまいました。どうしたらいいでしょう?なにかいい方法はありますか?

回答

  • PDRを使う -- 2008-10-09 (木) 23:35:55
  • PDRファイルにどんなASを記述すればいいのでしょうか。 -- 質問者? 2008-10-10 (金) 16:18:11
  • 自機をインスタンスmcA、光線をインスタンスmcBとした場合
    mcAのクリップアクションに
    onClipEvent (enterFrame) {
    if(this.hitTest(_parent.mcB._x,_parent.mcB._y,true)){処理}
    }
    と書いてみてください
    mcAの外郭とmcBのXY座標で当たり判定を取るASです-- 2008-10-10 (金) 17:28:11
  • 当たり判定はhitTestで取っていると思いますが、インスタンス同士で判定をとると四角形での判定になってしまいます。インスタンスと座標での判定を取れば、形どおりに判定が取られます。 -- 2008-10-11 (土) 11:53:16
  • mcBに相当するものがたくさんあるので、それぞれのmcBに
    onClipEvent (load) {
    start_x = int(Math.random()*440)+20;
    start_y = -30;
    start_rotation = int(Math.random()*360);
    _x = start_x;
    _y = start_y; 
    step = 0; 
    }
    -
    onClipEvent (enterFrame) {
    step = step + 1.5;
    _y = start_y + (step * 2);
    if(this.hitTest(_root.you._x,_root.you._y,true)){
    if(this._visible==true){
    _root.text_score=_root.text_score+2;
    _visible=false;
    }else{
    _root.text_score=_root.text_score-0;
    }
    }
    }
    (youは自機)と記述し 自機は中心位置をずらしてマウスで動くようにしています。
    onClipEvent (mouseMove) {
    var d = 0.15;
    _x += (_root._xmouse - _x) * d;
    _y += (_root._ymouse - _y) * d;
    updateAfterEvent();
    }
    これだと中心位置(x=0,y=0)しか判定してくれませんでした。
    マウスで動かすのがいけないのでしょうか?中心位置の変更がいけないのでしょうか?-- 質問者? 2008-10-13 (月) 10:29:52
  • ファイルリストで、インスタンスyouのスプライトの基準点を「スプライトの中央に設定」してますか? -- 2008-10-13 (月) 13:31:34
  • 「スプライトの中央に設定」としましたが、どうやら_x=0,_y=0しか当たり判定が取れないようです。アドバイスください! -- 質問者? 2008-10-13 (月) 22:17:44
  • スプライトの中の画像の配置がずれてると思いますので直してみてください -- 2008-10-14 (火) 14:22:35
  • スプライトの中の画像の位置は枠内に入っています。画像の中央(_x=0,_y=0)でしか当たり判定が取れてません。
    スプライトyouの中心位置はx=25,y=25で、スプライトyouの中に入っているPDRファイルのサイズは50*50
    スプライトyouの中にあるPDRファイルの中心位置はx=0,y=0です。 -- 質問者? 2008-10-14 (火) 14:52:23
  • 正確に外郭と外郭で当たり判定を取ることはhitTest()だけではできません。やはりアバウトな判定にはなりますがgetBounds()で当たり判定を狭めてみる方法をお勧めします -- 2008-10-14 (火) 19:36:47
  • hitTest(ターゲット)ないし、hitTest(X,Y,形状チェック)のどちらかを使いますが、前者のターゲットしていならば、スプライトの境界ボックスで判定され、対象もスプライトの境界ボックスとなります。後者の方法で、形状チェックをtureにすればスプライトの形状で判定されますが、対象は座標となります。_root.you._x,_root.you._yで指定した座標です。ということで、形状と形状の当たり判定はhitTestでは無理ということです。 -- 2008-10-15 (水) 17:25:18