cocos2d中不同的x和y速度(加速度)?

时间:2012-04-30 08:19:57

标签: ios path cocos2d-iphone acceleration

我想使用标准动作(CCMoveBy和e.t.c)创建一个带有轨迹的可见对象,类似于:

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以调整对象轨迹。但我想设置角度变量的初始值。

我使用数字而不是变量,因为它们仅在此函数中使用。

解决

要更改初始角度:

angle = point.x&lt; 240? -asin((240-point.x)/ 140):asin((point.x-240)/ 140);

主要问题是我的平铺地图有自己的坐标,仅覆盖屏幕的320x320部分

1 个答案:

答案 0 :(得分:1)

我认为你可以更容易地在你的帧更新方法中做到这一点(我假设你计划更新你的对象。所以为什么不这样做:

- (void)tick:(ccTime)dt {
   CGPoint pos = myObject.position;
   pos.x = <desired x> + sin(angle);
   pos.y = pos.y - y_acceleration * dt;
   angle += dt * 360 * x_acceleration;
   if (angle >= 360) 
       angle = ((int)angle) % 360;

   myObject.position = pos;
}

您可以将它应用于对象的y轴