Box2Dでプログラムから垂直同期をとってループを回すと重力が弱くなってしまう

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
H.MAI

Box2Dでプログラムから垂直同期をとってループを回すと重力が弱くなってしまう

#1

投稿記事 by H.MAI » 9年前

今Box2Dでプログラムを作っています。
フルスピードでループを回した場合は問題ないのですが
以下のように垂直同期でモニタのリフレッシュレート(60Hz)に合わせて
ループを回すとBox2Dの重力がとても弱くなってしまいます(落下スピードが遅い)。
処理回数が減った為かと思いSetGravity()の設定値を上げてみたのですが
どれだけ上げてもある一定のところから重力が強くなりません。
Step()の値も色々弄ってみたのですがダメでした。
フルスピードでループを回せばどんどん重力を強くできます。
垂直同期をとった場合でも重力を強めるにはどうすればよいでしょうか?
※Box2Dはオフィシャルサイトからダウンロードしたbox2d-master.zipというものです(最新バージョンだと思います)

コード:

world.SetGravity(b2Vec2(0, 30.f));

while(1){
    world.Step(1/60.f, 10, 10);
    vsync(); //vsyncを入れると重力が弱くなってしまう(どれだけ上げても一定値から強くならないStep()の値を弄ってもダメ)
}


H.MAI

Re: Box2Dでプログラムから垂直同期をとってループを回すと重力が弱くなってしまう

#3

投稿記事 by H.MAI » 9年前

座標系というのは、それぞれのオブジェクトの動きを自分で制御するってことですかね?
その他の力学系の力を与えるメソッドなんかも全て上手く効かなくなってしまうのですよね…
自分なりに色々検索してみたんですがどうも情報に行き当たらなくて。

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: Box2Dでプログラムから垂直同期をとってループを回すと重力が弱くなってしまう

#4

投稿記事 by ISLe » 9年前

何もしないと、1m1ピクセルなので
1mあたり何ピクセルにしたいのか決めて
Box2Dに座標やサイズをセットするときはその数値で割って
画面に表示するときはその数値を掛ける
というふうにするのだそうです。

重力は加速度なので精度の問題が大きそうに感じたので
一定以上大きくならないというのはそのへんかなと思いました。

フルスピードで回すとどんどん強くなるというのは謎ですけど。

H.MAI

Re: Box2Dでプログラムから垂直同期をとってループを回すと重力が弱くなってしまう

#5

投稿記事 by H.MAI » 9年前

仰る通りでした!
デフォルトでは1mが1pxになってたようでした。
1m辺りのpx数を変更する事でこの辺りの問題を解消できました!
誠にありがとうございました!

閉鎖

“C言語何でも質問掲示板” へ戻る