我滚动我的背景的速度值为float speed = 50;我想改变这个速度值取决于我的精灵在背景上的角度,所以它看起来像是当它转弯时精灵减速。我所有的存取器和变更器都设置好了,我只是不能计算出根据精灵的角速度来改变背景速度的公式。
这是我的赋值函数,无论我用什么公式给我赋值,它都会从我的update方法中的每个刻度中去掉,如下所示:
-(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。
发布于 2012-07-04 07:37:31
数学时间!:D
你想要的是找到旋转后的向量的y分量。矢量的大小等于你的速度(也就是速度)。
老提醒:所以-!
我们将使用CAH: Cosine(angleInRadians) =相邻/斜边...在这种情况下,角度是已知的(精灵旋转),斜边是已知的(精灵的模拟速度),相邻的是背景在y方向上的未知速度。所以,我们求解“相邻”..。
关于代码:
float spriteSpeed = 50.0;
...
float radians = -CC_DEGREES_TO_RADIANS(yourSprite.rotation);
float backgroundYSpeed = cosf(radians) * spriteSpeed;您还可以同时使用Sine来水平移动背景:
float backgroundXSpeed = sinf(radians) * spriteSpeed;https://stackoverflow.com/questions/11319073
复制相似问题