2015-11-19 3 views
0

Я разрабатываю игру в cocos2d-x, в которой есть спрайт шара. Я перемещаю шар на поверхности (стене) через события касания. Можно ли вращать шарик естественным образом в соответствии с его скоростью?Как естественным образом вращать шар в соответствии с его скоростью на поверхности, стена

если я использую ballSprite-> runAction (..) в методе update (float dt), то он не вращается.

я использую следующий код:

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

Но мяч, естественно, не вращается. он дискретно вращается.
он не может вращаться естественным образом в соответствии со своей скоростью.

Спасибо.

+0

Вы смешиваете Degress и радиан. Вы умножаете время 360 и позже конвертируете его из радианов в дегресс. – Makalele

ответ

0

Ваш вопрос может означать несколько вещей. Вы хотите, чтобы мяч вращался во время «прокатки» на поверхности? Вы хотите, чтобы мяч всегда вращался в зависимости от скорости движения? Вы хотите, чтобы мяч вращался определенным образом после отскока от стены? все они имеют отдельные ответы.

Для вашего вопроса я предполагаю, что вы хотите перетащить мяч на свою стену, и он должен «катиться», когда он движется. Для достижения такого поведения было бы сложно соединить скорость, так как вы «перетаскиваете» мяч и не перемещаетесь в зависимости от движения. Поэтому я бы просто обновил свою ротацию моего спрайта с помощью дельты, которую мяч переместил в мою функцию onTouchMoved.

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

Это приведет к тому, что ваш спрайт вращается, когда игрок перетаскивает его по экрану.

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(); 
    } 

} 

Использование CCPoint вместо Vec2 если ваша cocos2dx версия < 3,0

 Смежные вопросы

  • Нет связанных вопросов^_^