2016-11-11 10 views
1

を回転からプレーヤー(ボックス)を停止するので、私は「A」と「D」を使用して水平方向に移動することができますプレーヤー(BOX2Dボックス)があります。BOX2Dどのよう

SetLinearVelocity(b2Vec2(speed, object.getB2Object()->GetLinearVelocity().y)); 

をしかし、私はボックスを移動するときプレイヤーは、スライドが、そのようなコーナーでのロールはありません:

enter image description here

私は箱の摩擦や地面の減少はある程度、これを防止することを考え出したが、それでもかなりregulary起こるともなりますプレーヤーはさらに停止するとスライドします。私は関数SetFixedRotation(true)を試しましたが、これはプレイヤーがすべて一緒に動くのをやめさせるようですが、おそらく回転しようとしていたポイントで終わります。私もSetAngularVelocity(0)を試しましたが、これはまだ非常にゆっくりですが、ボックスを回転させます。表面上を移動するときにプレーヤーが回転しないようにするもう1つの方法はありますか?おかげ

ほとんど回転しないボックスをゼロに摩擦を設定することにより、提案するものpingul行った後、[編集]。それは何かに非常に頻繁に乗っているように見えました。床のための10個の個別のタイルの代わりに、私はタイルを取り除き、幅の広いタイルを作成して問題を止めました!だから私はその箱が次のタイルに沿ってトリップしていたと思う。

//the number of tiles 
const unsigned int MAX_TILES = 10; 
for(int i = 0; i < MAX_TILES; i++){ 
           //position      ,size   ,density ,linear_damping ,friction ,isdynamic,b2World          
    tiles.push_back(new GameObject(vec3(6+i-(MAX_TILES/2), -10, 1), vec3(1, 1, 0), 1.0f ,1.0f   ,0.5f  ,false ,world_b2)); 
    tiles[tiles.size()-1]->Init(); //Some OpenGL stuff for rendering 
    tiles[tiles.size()-1]->getMesh()->setTexture(test_sheet.getTexture(2,0)); //gets a texture from sprite sheet class 
} 

[編集2]

演算ライブラリが使用する:この出来事は、なぜ私はすべてのタイルを知っていると同じ高さ、幅及び位置を持っているように、ここで示したように私の次の問題はその後ですGLM

タイルを水平方向にオーバーラップさせるだけで何もしませんが、これは垂直軸に関係していると思います。プレイヤーが回転しているかどうかにかかわらず、別のタイルに行くと、yの値がわずかに変化します。これは、上または下のいずれかになり、+ -0.003〜だけ変化します。飛び降りると、フロアタイルのいずれかでゲームが始まると、最初の値に戻ります。

+0

摩擦を0にするとどうなりますか? – pingul

+0

私の編集を確認してください:) – MajesticHey

答えて

0

あなたはどのような種類のベクターライブラリを使用しているのかわかりませんが、vec3は引数としてfloatまたはdoubleを取ると仮定します。 vec3(6+i-(MAX_TILES/2)を浮動小数点数に変換すると、オブジェクト間のギャップが小さくなる可能性があります。

オブジェクトが少々重なることはありますか? sizevec3(1.0001, 1, 0)に変更するとどうなりますか?

+0

お世話になりました。編集2を追加しました – MajesticHey

+0

@MajesticHey Hmm ...あなたのタイルコードはその不一致の原因ではありません。ビットマップの代わりに異なるオブジェクトの境界ボックスを描画するとどうなりますか?例えば。オブジェクトを非常に明白な色にして、それらを代わりに描画します。また、キャラクターを動かすためのコードを表示できますか? – pingul

+0

@MajesticHey問題の解決方法を見つけましたか? – pingul

関連する問題