如何使用Box2D在cocos2d iPhone上调整b2CircleShape的大小
How do I resize a b2CircleShape on cocos2d iPhone with Box2D
我有一个2D物理沙盒,上面有一堆圆圈,它们在接触时会调整大小(越大越大,越小)。我可以很好地调整精灵的大小,我知道你不能缩放 B2Body - 你需要销毁它并重新创建它,但我对 Box2D 还不够熟悉。
以下是我正在调整精灵大小的方法:
std::vector<MyContact>::iterator pos;
for(pos = _contactListener->_contacts.begin();
pos != _contactListener->_contacts.end(); ++pos) {
MyContact contact = *pos;
b2Body *bodyA = contact.fixtureA->GetBody();
b2Body *bodyB = contact.fixtureB->GetBody();
if (bodyA->GetUserData() != NULL && bodyB->GetUserData() != NULL) {
PaintBlob *spriteA = (PaintBlob *) bodyA->GetUserData();
PaintBlob *spriteB = (PaintBlob *) bodyB->GetUserData();
NSLog(@"spriteA: %@ is touching spriteB: %@", spriteA, spriteB);
if((spriteA.scale > spriteB.scale) && (spriteB.scale > 0)){
spriteA.scale = spriteA.scale + kSCALE_INCREMENT;
spriteB.scale = spriteB.scale - kSCALE_INCREMENT;
}else if (spriteA.scale >0) {
spriteB.scale = spriteB.scale + kSCALE_INCREMENT;
spriteA.scale = spriteA.scale - kSCALE_INCREMENT;
}
}
}
如何调整(销毁/重新创建)Box2D 主体(b2CircleShape?)。
我认为这就是你在 C 中的做法 - 从 emanueleferonato.com 开始(我不够开明,无法理解 C):
// if I selected a body...
if (body) {
// I know it's a circle, so I am creating a b2CircleShape variable
var circle:b2CircleShape=body.GetShapeList() as b2CircleShape;
// getting the radius..
var r=circle.GetRadius();
// removing the circle shape from the body
body.DestroyShape(circle);
// creating a new circle shape
var circleDef:b2CircleDef;
circleDef = new b2CircleDef();
// calculating new radius
circleDef.radius=r*0.9;
circleDef.density=1.0;
circleDef.friction=0.5;
circleDef.restitution=0.2;
// attach the shape to the body
body.CreateShape(circleDef);
// determine new body mass
body.SetMassFromShapes();
}
return body;
嗨,
你这个英俊的魔鬼。
方法如下:
//Radius is worked out by scale * kBLOBDIAMETER /2
contact.fixtureA->GetShape()->m_radius = (spriteA.scale * kBLOBLDIAMETER / 2) /PTM_RATIO;
contact.fixtureB->GetShape()->m_radius = (spriteB.scale * kBLOBLDIAMETER / 2) /PTM_RATIO;
bodyA->ResetMassData();
bodyB->ResetMassData();
相关文章:
- 为char数组调整zlib-zpipe
- 调整大小后指向元素值的指针unordered_map有效?
- 在C++中调整向量中的索引
- 哪些库可以通过Opencv调整曝光率
- 如何调整 std::vector of Eigen::MatrixXd 的大小
- Alt+Enter 在 Win32 应用中,管理大小调整和分辨率
- 在容量内调整矢量大小时的性能影响
- 将 boost::odeint 与向量类一起使用,而无需调整向量的大小
- 将摄像机调整到俯视图
- Qt 图表条形图调整大小崩溃
- 除非重新绘制大小,否则SDL_Texture在调整大小后呈现黑色
- 调整布局上的 QGraphicsView 小部件的大小
- 如何在构建链接列表时调整头、尾指针
- 如何将旧的 C 样式 #define 映射与现代C++进行调整?
- 当您在此单词中搜索单词时调整字符数组的大小?
- SDL2 调整窗口大小后如何缩放鼠标坐标?
- 如何按另一个向量的方向调整一个向量?
- 使用大小调整大小调整 wxListView 的大小
- 调整大小和复制哈希表数组中的元素
- 如何使用Box2D在cocos2d iPhone上调整b2CircleShape的大小