簡體   English   中英

圓形物體定位在box2d(cocos2dx)中不起作用

[英]Circular body positioning not working in box2d(cocos2dx)

我正在開發cocos2dX游戲。 我使用box2d進行物理模擬。 我正在嘗試添加圓形主體和矩形主體。 這是我的代碼

// Create circular sprite and body
CCSprite* ball_sprite = CCSprite::create("ball.png");
this->addChild(ball_sprite);

b2BodyDef ballBodyDef;
ballBodyDef.type = b2_dynamicBody;
ballBodyDef.position.Set(screenSize.width/PTM_RATIO, screenSize.height/2/PTM_RATIO);//im running it in an iphone retina and screensize is 640x960
ballBodyDef.userData = ball_sprite;
ball_body = _world->CreateBody(&ballBodyDef);

b2CircleShape ballshape;
ballshape.m_radius = BALL_SIZE/2;

b2FixtureDef ballShapeDef;
ballShapeDef.shape = &ballshape;
ballShapeDef.density = 100.0f;
ballShapeDef.friction = 0.5f;
ballShapeDef.restitution = 0.7f;
ball_body->CreateFixture(&ballShapeDef);

// Create rectangular sprite and body
CCSprite* block_sprite = CCSprite::create("HelloWorld.png");
this->addChild(block_sprite);

b2BodyDef blockBodyDef;
blockBodyDef.type = b2_staticBody;
blockBodyDef.position.Set(0, screenSize.height/2/PTM_RATIO);
blockBodyDef.userData = block_sprite;
block_bodie = _world->CreateBody(&blockBodyDef);

b2PolygonShape blockshape;
blockshape.SetAsBox(B_WIDTH/PTM_RATIO,B_HEIGHT/PTM_RATIO);
b2FixtureDef blockShapeDef;
blockShapeDef.shape = &blockshape;
blockShapeDef.density = 100.0f;
blockShapeDef.friction = 0.5f;
blockShapeDef.restitution = 0.7f;
block_bodie->CreateFixture(&blockShapeDef);

屏幕上將按預期顯示矩形。

但是屏幕上未顯示圓形主體。

當我在更新函數中打印圓形物體的位置時,該位置在2000左右較大。每次運行程序時,此位置都不同。

如果未添加矩形體(將注釋行block_bodie-> CreateFixture(&blockShapeDef);注釋),則圓形體將按我的預期顯示在屏幕上。

我在這里做錯了什么?

提前致謝。

這兩個實體在創建時是否重疊? 由於矩形是靜態的,而圓是動態的,因此很可能只是通過矩形將圓推開了。 如果嘗試創建它們兩者,但是不調用world Step函數來運行物理模擬,則可能會在屏幕上看到它們。

您可以創建它們,使它們不重疊,或至少不重疊太多,或使它們之一成為傳感器,或設置其碰撞類別和掩碼位,以使它們不相互作用。

當然,我假設您正在查看調試繪圖顯示,這確實是唯一確定確定物理引擎在做什么的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM