※ ChatGPTを利用し、要約された質問です(原文:キー入力で操作しているMCを障害物で止める方法)
キー入力で操作しているMCを障害物で止める方法
このQ&Aのポイント
キー入力で操作しているMCが障害物内に飛んでしまう問題や、障害物の上を流される現象が起こる場合の解決策を求めています。
衝突判定が実行されると障害物から離れられない問題や、障害物に接触した後に違うキーを押すと障害物の反対側に飛んでしまう現象などに困っています。
WinXPとFlash8Proでオーサリングしており、障害物のMCに関連するスクリプトも記載しています。何か良い解決策があれば教えてください。
WinXP、Flash8Proにてオーサリングしております。
【文字制限上最小限の説明とスクリプトも寄せてあります】下sと右dの場合ではプレイヤーの位置が障害物内に飛ぶ。一度衝突判定が実行されると障害物から離れられない。障害物に接触したあと接触時と違うキーを押すと障害物の反側面に飛んでしまう現象や、障害物は多数が若干かさなり合いながら置かれているので、その障害物の上をプレイヤーが流される現象が起こる。何か良い打開策はないものでしょうか。【障害物のMCに記載】
onClipEvent (enterFrame) {
PM=_root.main_mc.player_mc.player_mc_mc;
PMM=_root.main_mc.player_mc.player_mc_mc.player_mc_mc;
if(this.hitTest(PMM)){
_global.key_lis2();//getting key_code2
_global.edge = new Object;
_global.edge = this.getBounds(PM._parent);
ply=PM;MC1=this._parent;//obje
MC2=_root.main_mc.player_mc;//ply
//「obje」ムービークリップの座標をグローバル座標に変換
p = new Object();p.x = this._x;p.y = this._y;
MC1.localToGlobal( p );
//変換した座標を「ply」と同じ座標系の座標に変換
MC2.globalToLocal( p );
var edge:Object , adjust:Number;
edge = new Object;adjust = 2;
edge = this.getBounds(_root.main_mc.player_mc);
trace("edge="+edge.yMax);
switch( _global.key_code2 ){case 'w':
MC2.player_mc_mc._y = edge.yMax;break;case 's':
MC2.player_mc_mc._y = edge.yMin;break;case 'a':
MC2.player_mc_mc._x = edge.xMax;break;case 'd':
MC2.player_mc_mc._x = edge.xMin;break;default:break;
}}//end of hitTest}//end of onEnterFrame
お礼
いつもお世話になっております。 DPE様、有難う御座います!やっと正常動作させることができました^^ 感激です♪ 外部SWFも最初からシンプルなものを作り、ひとつずつ動作検証を行いました。 また、メーンのシーンのスクリプトも 一度単純なものをテスト用として作り、最初から一ずつ検証する事でデバッグを成功させる事ができました。 ちなみに、原因は二つありまして、 外部SWF内のMCにonClipEvent(enterFrame) が書かれていたのですが、それがなぜか?妨害していたようです。 また、plyの衝突処理を case 'w': ply._y = edge.yMax + adjust; break; //下に移動していた時:障害物の上端で停止 case 's': ply._y = edge.yMin - ply._height +10 - adjust; break; //左に移動していた時:障害物の右端で停止 case 'a': ply._x = edge.xMax + adjust; break; //右に移動していた時:障害物の左端で停止 case 'd': ply._x = edge.xMin - ply._width - adjust; break; とする事で正常に動作しました。 この様に書かずに一つでもちがうと プレイヤーが跳ね返ったり、ワープしたりしてしまいます。 跳ね返り現象やワープ現象は、 プレイヤーと障害物の距離を正しく補正する事で解消できた見たいです。 今まで教えて頂いた内容はすべて出力して 大切に保管させて頂いております。 また、書籍などでは目にする事が出来ないスクリプトもこれから意欲的に応用していけそうです。 何度も何度も多大な時間をかけて親切丁寧な解説と スクリプトを頂き、本当に感謝しております^^ 本当に有難うございました! 正直、ここまで協力頂いたのに完成した際に お見せできないのが残念でなりません。 教えてGooのシステム上、大変残念です。 ですが、また何かありましたらその際は、 どうぞ宜しくお願い致します。