#objective-c #cocos2d-iphone
#цель-c #cocos2d-iphone
Вопрос:
представь, что у меня есть мяч. Пользователь прикасается к нему, и мяч взлетает вверх. На данный момент направление импульса является статичным
ball->ApplyLinearImpulse(b2Vec2(20.0f,100.0f),ball->GetWorldCenter());
и
b2Vec2(20.0f,100.0f)
является вектором импульса. Я хочу, чтобы вектор импульса генерировался случайным образом. Я думаю, это следует сделать, выбрав место касания мяча.
Этот вопрос больше касается математики. Как я могу вычислить вектор случайного импульса в соответствии с местоположением касания? Есть какие-нибудь идеи?
Комментарии:
1. Если оно случайное, почему оно должно быть связано с местоположением касания?
2. Легко создать псевдослучайный вектор, но он тот же, учитывая тот же вектор, но я думаю, что это просто создает больше работы без выигрыша (человеку почти невозможно коснуться одной и той же точки).
Ответ №1:
Простым решением было бы создать вектор от местоположения мяча до местоположения касания и использовать его масштабированную версию в качестве вашего вектора импульса.
Редактировать: Некоторый псевдокод для вычисления этого вектора
-(void) createImpulse(Vector touchPoint)
{
//this is now a vector pointing from the touch point to the ball
Vector diff = [ball->GetWorldCenter() vectorSubtract:touchPoint];
//Generate a random float from 1/2 to 2
float scale = randFloat(0.5f, 2.0f);
//Scale the vector by the float
Vector impulse = [diff scaleBy:scale];
ball->ApplyLinearImpulse(b2Vec2(impulse.x, impulse.y), ball->GetWorldCenter() );
}
Комментарии:
1. Это настолько близко к реальному коду, насколько я могу подойти, зная ваш фреймворк не больше, чем я уже знаю из вашего кода.