我正在使用PhysicsSprite类
我已经更改了这段代码:
transform_ = CGAffineTransformMake( c, s,
-s, c,
x, y );
在nodeToParentTransform
方法中:
transform_ = CGAffineTransformMake( c * scaleX_, s * scaleX_,
-s * scaleY_, c * scaleY_,
x, y );
问题在于物理体是错位的,正如您在此屏幕截图中看到的那样(在调试绘图中启用了e_shapeBit):
创建机构如下:
b2BodyDef bodyDef;
bodyDef.type = b2_dynamicBody;
bodyDef.position.Set(brick.sprite.position.x/PTM_RATIO, brick.sprite.position.y/PTM_RATIO);
bodyDef.userData = brick.sprite;
b2Body *body = world->CreateBody(&bodyDef);
body->SetGravityScale(0);
brick.sprite.userData = body;
b2PolygonShape dynamicBox;
dynamicBox.SetAsBox(levelObj.brickScale * .5f, levelObj.brickScale * .5f);
b2FixtureDef fixtureDef;
fixtureDef.shape = &dynamicBox;
fixtureDef.density = 1.0f;
fixtureDef.friction = 0.3f;
body->CreateFixture(&fixtureDef);
body->SetType(b2_dynamicBody);
brick.sprite.userObject = brick;
[brick.sprite setPhysicsBody:body];
修改
抱歉,我还没有说清楚:通过缩放我的意思是自然的Cocos2D构造brick.sprite.scale = 0.5f
,其中brick.sprite
是PhysicsSprite
类的实例。如果不修改nodeToParentTransform
,它就完全没有效果。砖精灵是32x32px,PTM_RATIO = 32
它提供1x1m的物理尺寸,因此是SetBox参数。
答案 0 :(得分:0)
您不必修改 nodeToParentTransform 方法以支持缩放。您可以初始化您的身体形状以匹配精灵的尺寸:
dynamicBox.SetAsBox(brick.sprite.contentSize.width/PTM_RATIO * brick.sprite.scaleX * .5f, brick.sprite.contentSize.height/PTM_RATIO * brick.sprite.scaleY * .5f);
答案 1 :(得分:0)
最好的方法是在精灵身高和体重的帮助下创造身体。