編集 2: 問題が解決しました! 異なる設定で動作するとは約束できませんが、ブロックのボディ密度を 0 にすることで、新しいブロックが追加されたときにブロックのスタックが落ちなくなりました。
質問のタイトルが悪くて申し訳ありません。ここで問題を詳しく説明します。
そこで、Box2D と cocos2D を使用して、2 つのボックスを積み重ねる単純なプロジェクトをセットアップしました (8 ~ 10 個のボックスに拡張する予定です)。現在、各ボックスに 10.0f の摩擦を使用すると、上部のボックスはまだ少し動きます。ボックスをさらに追加すると、「タワー」が倒れてしまいますが、それは望ましくありません。
ボックスが重力を使用して下に移動するようにしたいのですが、x 値の開始時にボックスが変更されることは決してありません。では、箱の塔が倒れたり、箱が x 方向に移動するのを防ぐにはどうすればよいでしょうか?
編集: いくつかのコードを投稿する このコードはボックスの上に作成され、もう一方のボックスには別のスプライト ファイルがあります。
CCSprite *block = [CCSprite spriteWithFile:@"red.png"];
block.position = ccp(200,380);
[self addChild:block];
//Body definition
b2BodyDef blockDef;
blockDef.type = b2_dynamicBody;
blockDef.position.Set(200/PTM_RATIO, 200/PTM_RATIO);
blockDef.userData = block;
b2Body *blockBody = _world->CreateBody(&blockDef);
//Create the shape
b2PolygonShape blockShape;
blockShape.SetAsBox(block.contentSize.width/PTM_RATIO/2, block.contentSize.height/PTM_RATIO/2);
//Fixture defintion
b2FixtureDef blockFixtureDef;
blockFixtureDef.shape = &blockShape;
blockFixtureDef.restitution = 0.0f;
blockFixtureDef.density = 10.0f;
blockFixtureDef.friction = 10.0f;
_redBlockFixture = blockBody->CreateFixture(&blockFixtureDef);
派手なものはありません。
よろしく。