2015-02-24 2 views
0

В cocos2d-spritebuilder 3.4 Я создал свой физический мир и свой плеер, как и многие официальные примеры.iOS cocos2D Бурундук Скорость тела недействительна

self.sprite.physicsBody = [CCPhysicsBody bodyWithCircleOfRadius:10 andCenter:self.anchorPoint]; 
    self.sprite.physicsBody.type = CCPhysicsBodyTypeDynamic; 
etc... 

Так что, когда я пытаюсь переместить мой спрайт вправо, например, с

[self.sprite.physicsBody applyImpulse: CGPointMake(32,0)]; 

мое приложение собирается в аварии сообщать об этом:

Aborting due to Chipmunk error: Body's velocity is invalid. 
    Failed condition: v.x == v.x && v.y == v.y 
    Source:.../Source/libs/cocos2d-iphone/external/Chipmunk/src/cpBody.c:106 

Бурундук источника имеют:

-(void)applyImpulse:(CGPoint)impulse { _body.velocity = cpvadd(_body.velocity, cpvmult(CCP_TO_CPV(impulse), 1.0f/_body.mass));} 

Итак, я знал MASS была выставиться по умолчанию для 1.0f, но я хочу, чтобы попытаться установить это значение вручную ..):

self.sprite.physicsBody.mass = 1.0f 

Та же ошибка, одни и те же результаты ... Но если я пытаюсь установить:

self.sprite.physicsBody.body.mass = 1.0f 

Он отлично работает. Итак, каковы различия между этими двумя параметрами? Зачем применятьImpulse взять только body.mass?

+0

Хотя я не физик, то ясно, что вы путаете скорость с импульсным (с учетом вы использовали скорость в вашем 'applyImpulse' вызова). Я ожидаю, что вам нужно будет экспериментировать с разными значениями импульса до тех пор, пока тело не начнет вести себя так, как вы ожидали (возможно, изменив значения импульсов с течением времени, исходя из поведения пользователя). Начните с чтения [этого] (http://www.physicsclassroom.com/class/momentum/Lesson-1/Momentum-and-Impulse-Connection). – trojanfoe

+0

Сэр, проблема не является импульсом. Игра работает хорошо, мой вопрос ясен и реферирует к источникам бурундука, о двух переменных массы вместо одного. –

ответ

1

Насколько я знаю, Бурундук не играет хорошо, применяя «большой» импульс. То, что вы должны попробовать, это увеличить скорость на несколько кадров.

Edit: Проверить эту ссылку http://forum.cocos2d-swift.org/t/ccphysics-applyimpulse-not-working/12151/12

+0

Спасибо за ответ, но также рекомендуется не работать со значениями скорости, если вы не хотите, чтобы такие проблемы, как «туннелирование» при обнаружении коллизий. Итак, каков правильный путь? –

+0

Вот почему нужно наращивать скорость на несколько кадров, чтобы избежать туннелирования и прохождения тонких коллайдеров. Я не думаю, что есть рекомендуемый способ сделать это, потому что, хотя API поставляется с ApplyImpulse, не рекомендуется и не реалистично (именно поэтому мы используем библиотеку физики) применять большой импульс, не впадая в него. В моей игре мне пришлось ускорить мой персонаж в течение нескольких кадров, чтобы он не проходил сквозь стены. Удачи! – younesouhbi

+0

Благодарю younesouhbi, но, несмотря на все эти меры предосторожности (я уже пробовал это), к сожалению, Chipmunk не использует CCD (непрерывное обнаружение столкновений), поэтому невозможно избежать проблемы туннелирования, также со скоростью нарастания на несколько кадров (на самом деле это структурная проблема, полученная физическим двигателем ...). Но это ОТ, мой вопрос был направлен на body.mass и массовые параметры. –

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