このメソッドを使用してスプライトを初期化します。
-(id)initAttackerWithType:(ShapeType)type withPosition:(CGPoint)pos world:(b2World*)world andEnergy:(float)energy {
if(([self initWithTexture:[[CCTextureCache sharedTextureCache]addImage:@"circle.png"]])){
self.tag=type;
self.color= type == Enemy ? ccc3(255, 0, 0) : ccc3(0, 255, 0);
self.scale=energy *.22/PTM_RATIO; //scale depending on energy
// 0.22 gets the sprite scale to synchronize with shape radius
self.position=pos;
b2BodyDef bodyDef;
bodyDef.type = b2_dynamicBody;
bodyDef.position.Set(pos.x/PTM_RATIO, pos.y/PTM_RATIO);
_body = world->CreateBody(&bodyDef);
b2CircleShape dynamicCircle;
dynamicCircle.m_radius=energy/PTM_RATIO; //radius depending on energy
b2FixtureDef fixtureDef;
fixtureDef.shape = &dynamicCircle;
fixtureDef.density = 1.0f;
fixtureDef.friction = 0;
fixtureDef.restitution = 1;
_body->CreateFixture(&fixtureDef);
fixtureDef.userData=self;
_body->SetUserData(self);
}else self = nil;
return self ? self : nil;
}
力学、衝突に関するすべてがうまく機能します。唯一の問題は、エネルギーに応じてスプライトのスケールが変化しないことです。誤解しないでください。画面に追加されているはずですが、スケール 1 でのみです。
スケールをログに記録すると、本来あるべきスケールでログが記録されますが、実際の画像はそうではありません。
見落としていたシンプルで簡単なものがあると確信していますが、何がわかりません。