的Box2D如何从旋转

问题描述:

播放器(盒)停止所以我有一个播放器(Box2D的框),可以水平与“A”,用“d”被移动:的Box2D如何从旋转

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

但是,当我移动的方块玩家不滑动,但是角色的角落,像这样:

enter image description here

我想通了,降低了框的摩擦和地面防止这在一定程度上,但仍然发生相当regulary也使得播放器停止时进一步滑动。我已经尝试过SetFixedRotation(true)函数,但是这似乎使玩家停下来一起移动,大概在它要旋转的地方。我也试过SetAngularVelocity(0),但是这仍然使得盒子旋转,尽管非常缓慢。在表面移动时,是否有另一种方法来防止玩家旋转?由于

[编辑]

做设定的摩擦几乎为零旋转框提示什么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

我不知道你使用的是什么样的矢量库,但我会假设vec3将浮点数或双精度作为参数。将vec3(6+i-(MAX_TILES/2)转换为浮点数可能会导致对象之间的小差距。

对象可以重叠少量吗?如果将size更改为vec3(1.0001, 1, 0),会发生什么情况?

+0

感谢您的耐心等待。添加了编辑2 – MajesticHey

+0

@MajesticHey嗯...你的瓷砖代码不应该为这种差异负责。如果绘制不同对象的边界框而不是位图,会发生什么情况?例如。使物体有一些非常明显的颜色,并绘制出来。另外,你能否展示移动角色的代码? – pingul

+0

@MajesticHey你找到了解决这个问题的方法吗? – pingul