播放器(盒)停止所以我有一個播放器(Box2D的框),可以水平與「A」,用「d」被移動:的Box2D如何從旋轉
SetLinearVelocity(b2Vec2(speed, object.getB2Object()->GetLinearVelocity().y));
但是,當我移動的方塊玩家不滑動,但是角色的角落,像這樣:
我想通了,降低了框的摩擦和地面防止這在一定程度上,但仍然發生相當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會發生什麼? – pingul
請檢查我的編輯:) – MajesticHey