ページ 11

Box2Dでキャラが吹っ飛びます・・・

Posted: 2011年4月17日(日) 14:39
by ren120
14歳から始める C言語わくわくゲームプログラミング教室の付属ソースコードchap4のmain.cppを改変したものについての質問です。
自習室ブログに質問しようとしましたが、ログインしていてもエラーで質問できなかった上、メールで問い合せても返事が帰って来ないので、こちらで質問させていただきます。

オリジナルソースからの改変点
・キャラサイズを小さくし、その分、吹っ飛ばないために、CreateBox関数のボディ密度を改変したCreateChar関数を作成しました。
・ジャンプ中も少し左右に移動できるように、地面についているときの半分の力を加えるようにしています。
・二段ジャンプも追加しました。
・左右だけでなく、上下にもキャラが足踏できるようにしています。

なぜ質問させていただいたかというと、左右キーを入力してジャンプをすると、キャラが吹っ飛ぶからです。
左右キーなしでジャンプすると正常に動作します。
二段ジャンプは正常に動作します。

ゲームを作るというよりは、学習目的で作ってます。
何がいけないのでしょうか?
ご教授いただけると、ありがたいです。

改変物を、アップしていいものかと思いましたが、こちらに、抜粋したものを置いておきます。


Windows7 64bit Professional
Visual C++ 2010

Re: Box2Dでキャラが吹っ飛びます・・・

Posted: 2011年4月17日(日) 15:10
by ren120
http://www1.axfc.net/uploader/Sc/so/225325
コンパイルしたものです。画像等は適当に付属物から差し替えました。
結構適当に作ったので、一部元画像が消しきれてない部分があります・・・
キャラは自分で作れないので、こちらからお借りしました。
http://piapro.jp/t/Y2Fm

キャラの吹っ飛びですが、左右に移動しながらXを押してみてください。

Re: Box2Dでキャラが吹っ飛びます・・・

Posted: 2011年4月17日(日) 16:35
by ISLe
左右移動のとき、SetLinearVelocityに与えるvecのyメンバを0にしないといけないのでは?
ジャンプしたときにセットした値でどんどんY方向に加速しているようです。

Re: Box2Dでキャラが吹っ飛びます・・・

Posted: 2011年4月18日(月) 15:43
by ren120
回答ありがとうございます。
今週末にでも、修正してみます。

もし、それでもわからなかった場合、またお教えいただくと思いますが、そのときはよろしくおねがいします。

Re: Box2Dでキャラが吹っ飛びます・・・

Posted: 2011年4月20日(水) 20:50
by ren120
言われてみた通り、左右移動時にSetLinearVelocity(vec)のyメンバに0を代入すると、吹っ飛びは回避されました。
しかし、通常ジャンプ時に比べ、ジャンプ力が高いのに無理やり押さえつけている感が出てしまいました。
いまだ、左右移動時にジャンプをすると、y軸方向に上向きに強い力が加わっているようです。
どこでそのような力が加わるのかわかりません・・・

Re: Box2Dでキャラが吹っ飛びます・・・

Posted: 2011年4月20日(水) 20:55
by ren120
コードを眺めていると、左右移動よりジャンプの処理がおかしいのかな?っと思って、
g_stage.isontheground = false;

g_stage.isontheground = true;
になんとなくしてみると、偶然、何故か問題が解決してしまいました。
こんなことなら、g_stage.isonthegroundに値を代入する必要がないのでは、と考えコメントアウトしてみると、やはり、正常に動作しました。
逆に、この挙動はなぜ?という問題が発生してしまいました。

Re: Box2Dでキャラが吹っ飛びます・・・

Posted: 2011年4月20日(水) 21:07
by ren120
g_stage.isonthegroundはCollision関数で毎ループチェックしているので、コメントアウトしても、ジャンプ処理が入ったときのループでの非接地時の処理をスルーするだけで、次のループから処理しているみたいです。

とりあえず、もとの問題は解決してしまったので、「解決」とします。
ただ、なぜジャンプ処理が入ったときのループでの非接地時の処理をおこなうと、キャラが吹っ飛ぶのかはわからないままです。