如何根据表面,墙壁上的速度自然地旋转球

时间:2015-11-19 13:08:06

标签: rotation cocos2d-x sprite velocity

我正在用cocos2d-x开发一款游戏,里面有一个球精灵。我通过触摸事件将球移动到表面(墙壁)上。是否可以根据球速自然旋转球?

如果我在update(float dt)方法中使用ballSprite-> runAction(..),那么它就不会旋转。

我使用以下代码:

void GameLayer::updateBall(float dt)
{
  float deltaRotateX = 360.0f * _ballVelocityX;
  _ballSprite->setRotation(90.0f- CC_RADIANS_TO_DEGREES(deltaRotateX));
}

但球没有自然旋转。它离散地旋转 它不能根据其速度自然旋转。

感谢。

2 个答案:

答案 0 :(得分:0)

你的问题可能意味着一些事情。你想在表面“滚动”时进行球旋转吗?你想让球总是根据它移动的速度旋转吗?你想让球在从墙上反弹后以某种方式旋转吗?所有这些都有不同的答案。

对于你的问题,我会假设你想把球拖到你的墙上,它必须在它移动时“滚动”。要实现这种行为很难与速度耦合,因为你“拖动”球并且它没有根据动作移动。所以我只想用我在onTouchMoved函数中移动的delta更新我的精灵旋转。

ballSprite->setRotation(ballSprite->getRotation() + touch->getDelta().distance);

这会让你的精灵旋转,因为玩家将它拖到屏幕上。

答案 1 :(得分:0)

试试这个,

Vec2 _lastBallPosition;//Declare this in your header file, it represents the las position of your ball

void GameLayer::updateBall(float dt)
{

    if (!_lastBallPosition.equals(getPosition())) {
        Vec2 delta=getPosition()-_lastBallPosition;
        setRotation(getRotation()+ delta.length());
       _lastBallPosition=getPosition();
    }

}

如果您的cocos2dx版本是< {p>,请使用CCPoint代替Vec2 3.0