コードの最初のバッチでスプライトとボディを作成すると、スプライトは円形のボディの中央に配置されます。しかし、コードの 2 番目のバッチでスプライトを作成すると、円形のボディの下部がスプライトの上部に接続されます。コードの両方のバッチは、次を使用します
更新 1 - createBody を変更して、入力として位置付けられるようにしました。次に、それぞれの原因で正しい位置を送信したと思いますが、コードの 2 番目のバッチで、スプライトの上部が本体の下部に接続されていることがわかります。
createBody メソッド:
- (void)createBody : (NSNumber *)xPos yPos:(NSNumber *)yPos {
float radius = 16.0f;
b2BodyDef bd;
bd.type = b2_dynamicBody;
bd.linearDamping = 0.1f;
bd.fixedRotation = true;
bd.position.Set([xPos doubleValue]/PTM_RATIO, [yPos doubleValue]/PTM_RATIO);
body = _world->CreateBody(&bd);
b2CircleShape shape;
shape.m_radius = radius/PTM_RATIO;
b2FixtureDef fd;
fd.shape = &shape;
fd.density = 1.0f;
fd.restitution = 0.0f;
fd.friction = 0.2;
body->CreateFixture(&fd);
}
コードの最初のバッチ -
Hero.mm -
- (id)initWithWorld:(b2World *)world {
if ((self = [super initWithSpriteFrameName:@"animal.png"])) {
NSNumber *xPos = [NSNumber numberWithDouble:self.position.x];
NSNumber *yPos = [NSNumber numberWithDouble:self.position.y];
[self createBody:xPos yPos:yPos];
}
}
ハローワールド.mm
_hero = [[[Hero alloc] initWithWorld:_world] autorelease];
[_terrain.batchNode addChild:_hero];
コードの 2 番目のバッチ -
Hero.mm -
CCSprite *sprite = [CCSprite spriteWithSpriteFrameName:@"animal.png"];
[self addChild:sprite];
NSNumber *xPos = [NSNumber numberWithDouble: sprite.position.x];
NSNumber *yPos = [NSNumber numberWithDouble: sprite.position.y];
[self createBody:xPos yPos:yPos];
2 つのコード バッチの主な違いは、最初のバッチではinitWithSpriteFrameNameを使用し、2 番目のバッチではspriteWithSpriteFrameNameを使用することです。spriteWithSpriteFrameName を使用してスプライトをボディの中央に配置する方法を知っている人はいますか?
奇妙なことに、 createBody メソッドのこの行は
bd.position.Set([xPos doubleValue]/PTM_RATIO, [yPos doubleValue]/PTM_RATIO);
スプライトにボディを配置するのではなく、ボディとスプライトをワールド座標に配置するようです。