按照突破游戏的教程,我用自己的身体创建了 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);
但是碰撞被忽略了,就好像身体根本不存在一样。那么,如果已缩放,如何使桨的 b2body 与桨精灵的大小相同?