次のような標準アクション (CCMoveBy など) を使用して、軌道を持つ可視オブジェクトを作成したいと考えています。
x = sin(y)
私のコード:
CCMoveBy *moveAction1 = [CCMoveBy actionWithDuration:1.5 position:ccp(300, 0)];
CCEaseInOut *easeInOutAction1 = [CCEaseInOut actionWithAction:moveAction1 rate:2];
CCMoveBy *moveAction2 = [CCMoveBy actionWithDuration:1.5 position:ccp(-300, 0)];
CCEaseInOut *easeInOutAction2 = [CCEaseInOut actionWithAction:moveAction2 rate:2];
CCMoveBy *moveAction3 = [CCMoveBy actionWithDuration:1.5 position:ccp(0, -32)];
CCSpawn *moveActionRight = [CCSpawn actionOne:easeInOutAction1 two:moveAction3];
CCSpawn *moveActionLeft = [CCSpawn actionOne:easeInOutAction2 two:moveAction3];
CCSequence *sequenceOfActions = [CCSequence actionOne:moveActionRight two:moveActionLeft];
CCRepeatForever *finalMoveAction = [CCRepeatForever actionWithAction:sequenceOfActions];
[enemy runAction:finalMoveAction];
このコードは、下に移動することのみを示しています。問題は、オブジェクトの x と y の加速度が異なり、それらを組み合わせる方法がわからないことです
更新しました
- (void)tick:(ccTime)dt
{
CGPoint pos = self.position;
pos.y -= 50 * dt;
if (pos.y < activationDistance) {
pos.x = 240 + sin(angle) * 140;
angle += dt * 360 * 0.007;
if (angle >= 360) {
angle = ((int)angle) % 360;
}
}
self.position = pos;
}
それが私の現在の解決策です。オブジェクトの軌道を調整するために、activationDistance を増やすことができます。しかし、角度変数の初期値を設定したいです。
数値はこの関数内でのみ使用されるため、変数の代わりに数値を使用します。
解決した
初期角度を変更するには:
角度 = point.x < 240 ? -asin((240 - point.x) / 140) : asin((point.x - 240) / 140);
主な問題は、私のタイル マップには独自の座標があり、画面の 320x320 部分のみをカバーすることでした。