0

我以速度值滚动我的背景,float speed = 50;我想根据我的精灵在背景上的角度来改变这个速度值,所以看起来精灵在转弯时正在减速。我所有的访问器和修改器都设置好了,我只是无法计算出根据精灵角速度改变背景速度的公式。

这是我的 mutator,无论我使用什么公式来赋予我价值,它都会在我的更新方法中的每个刻度中被删除,如下所示:

-(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,对公式有什么想法吗?

4

1 回答 1

1

数学时间!:D

您想要的是找到旋转矢量的 y 分量。矢量的大小等于您的速度(又名速度)。

老提醒:SOH-CAH-TOA!

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

上代码:

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

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

float backgroundXSpeed = sinf(radians) * spriteSpeed;
于 2012-07-03T23:37:31.097 回答