根据角速度改变速度

时间:2012-07-03 20:57:50

标签: objective-c math cocos2d-iphone velocity angle

我以float speed = 50;的速度值滚动我的背景我想根据我的精灵在背景上的角度来改变这个速度值,所以它看起来像精灵在转弯时减速。我的所有存取器和变换器都已设置好,我根本无法计算出根据精灵角速度改变背景速度的公式。

这是我的变异器,无论我用什么公式给我价值,它都会在我的更新方法中的每个刻度线上取下:

-(void) setSpeed:(float) value
{
    Speed -= value;
}

然后实际得到我使用的背景:

-(void) update:(ccTime)delta
{
    if (background.position.y < background2.position.y)
    {
        background.position = ccp(background.contentSize.width / 2, background.position.y - speed * delta);
        background2.position = ccp(background.contentSize.width / 2, background.position.y + background.contentSize.height);
    }
    else
    {
        background2.position = ccp(background2.contentSize.width / 2, background2.position.y - speed * delta);
        background.position = ccp(background2.contentSize.width / 2, background2.position.y + background.contentSize.height);
    }

    //reset
    if (background.position.y <-background.contentSize.height / 2)
    {
        background.position = ccp(background.contentSize.width / 2 ,background2.position.y + background2.contentSize.height);
    } 
    else if (background2.position.y < -background2.contentSize.height / 2)
    {
        background2.position = ccp(background2.contentSize.width / 2, background.position.y + background.contentSize.height);
    }
}

有什么想法吗?

编辑:

我认为更好的方法是让背景的速度值完全取决于玩家精灵旋转产生的公式,而不是我在50开始时将速度初始化,对公式的任何想法?

1 个答案:

答案 0 :(得分:1)

数学时间! :d

你想要的是找到旋转矢量的y分量。矢量的幅度等于你的速度(又称速度)。

Ye olde提醒:SOH-CAH-TOA!

我们想要使用CAH: Cosine(angleInRadians)= Adjacent / Hypotenuse ...在这种情况下,角度是已知的(精灵旋转),斜边是已知的(精灵的模拟速度),相邻是你背景在y方向的未知速度。所以,我们解决了“相邻”......

代码:

float spriteSpeed = 50.0;
...
float radians = -CC_DEGREES_TO_RADIANS(yourSprite.rotation);
float backgroundYSpeed = cosf(radians) * spriteSpeed;

您还可以使用Sine水平移动背景:

float backgroundXSpeed = sinf(radians) * spriteSpeed;