1 つのスプライトの「重力」をシミュレートしたいと考えています。
重力値を保持する CGPoint を定義しました。そして、私は tick メソッドを持っています。
//in my init I defined this: gravity = ccp(0.0f, -1.0f);
-(void)tick:(ccTime) dt {
if (enableGravity_) {
//simulate gravity
velocity_.x += gravity_.x;
velocity_.y += gravity_.y;
self.position = CGPointMake(position_.x + velocity_.x, position_.y + velocity_.y);
}
if (isAcceleratingEnabled_) { //I move my sprite here
float angle = self.rotation;
float vx = cos(angle * M_PI / 180) * acceleratingSpeed_;
float vy = sin(angle * M_PI / 180) * -acceleratingSpeed_;
CGPoint direction = ccp(vx, vy);
[self setPosition:ccpAdd(self.position, direction)];
}
}
編集:問題は..「isAccelerationEnabled」がYESの場合、スプライトを移動しています。そして、スプライトをそのように動かすと滑らかではありません。スプライトを上に移動してから「isAcceleration」を無効にすると、スプライトは上に移動しなくなりますが、重力によってスプライトが即座に引き下げられます。このコードで速度を使用する方法がわかりません:
[self setPosition:ccpAdd(self.position, direction)];
これは、重力をシミュレートするための本当にスムーズなソリューションではありません。
これにより、スプライトに重力が即座に適用されます。
でも、スプライトがスムーズに落ちる効果が欲しいです。本物の物体が地球に落ちたように。
ところで: スプライトに上向きの力も適用します。