在box2d中为精灵创建一个b2body

时间:2013-03-07 07:42:24

标签: c++ cocos2d-iphone box2d

tutorial for the breakout game之后,我用他们自己的身体创造了3个精灵 - 球和2个桨。我的问题可能很简单,很抱歉,我还在学习。无论如何,我的问题与示例不同,我的精灵是按比例缩放的,例如:

-(id)init {
    p1 = [CCSprite spriteWithFile:@"1.png"];
    p1.position = ccp(160, winSize.height * 0.08);
    p1.scaleX = 190 / 2 / p1.contentSize.width;
    p1.scaleY = 58 / 2 / p1.contentSize.height;

    b2BodyDef p1BodyDef;
    p1BodyDef.type = b2_dynamicBody;
    p1BodyDef.position.Set(160/PTM_RATIO, 40/PTM_RATIO);
    p1BodyDef.userData = p1;
    _p1Body = _world->CreateBody(&p1BodyDef);

    b2PolygonShape p1Shape;
    p1Shape.SetAsBox(p1.contentSize.width/PTM_RATIO/2, p1.contentSize.height/PTM_RATIO/2);

    b2FixtureDef p1ShapeDef;
    p1ShapeDef.shape = &p1Shape;
    p1ShapeDef.density = 0.3f;
    p1ShapeDef.friction = 1.0f;
    p1ShapeDef.restitution = 0.0f;
    _p1Fixture = _p1Body->CreateFixture(&p1ShapeDef);
}

创建主体后,我创建了一个更新方法,使用联系人侦听器检测我的球拍和球之间的碰撞。然而,这可以正常工作,我在测试游戏时注意到,即使没有与实际精灵的位置发生碰撞,但球的顶部和两侧都有2-3厘米的距离,球也会反弹。我怀疑这是因为我的多边形的形状和我的精灵的scale-x和-y是不同的。所以我的问题是,如何将主体的大小设置为与缩放的精灵相同?我试过像:

p1Shape.SetAsBox(190 / 2 / p1.contentSize.width/PTM_RATIO/2, 58 / 2 / p1.contentSize.height/PTM_RATIO/2);

但碰撞被忽略了,好像身体根本不在那里。那么如果我的桨的b2体与桨形精灵的尺寸相同,如何缩放呢?

1 个答案:

答案 0 :(得分:-1)

我不是百分百肯定,但我想我经过一些研究后想出来了。这是我如何设置身体的形状:

p1Shape.SetAsBox(p1.contentSize.width/PTM_RATIO/2 * p1.scaleX, p1.contentSize.height/PTM_RATIO/2 * p1.scaleY);

我不能肯定这是正确的解决方案,因为我没有启用调试绘图,我还不知道如何让它工作但是在尝试运行一些测试后从碰撞中判断在我的游戏中,这似乎解决了我的问题。如果有其他人认为有更正确的方法,请告诉我。感谢