2015-10-13 3 views
1

Установите сцену: • Нашего окружения: LibGdx Android & IOS // Если вы не знаете LibGdx, это нормально, просто знает, что эта программа является построить для прошивки и AndroidBox2d SetTransform

• Нашего экрана ничего не имеет, просто Box2d Circle

Итак, что мне нужно сделать? Мне нужно, чтобы мой Box2d Circle «телепортировался» туда, где экран прослушивается ... но мне нужно, чтобы он имел некоторую скорость, поэтому, если он столкнется с чем-то другим, он выбросит другой объект из своего пути.

Я использую body.setTransform(), но у меня нет скорости, и люди говорят, что это очень плохо.

Как это сделать? Спасибо!

+0

'setTransform' на самом деле не глючит (насколько я знаю), но он не использует никакой физики, которая обычно не является отключенным поведением. Если вы хотите, чтобы «круг» имел скорость после телепортации, вы можете просто добавить к нему удар, как только он был телепортирован. Если сам телепорт должен выбросить объекты из своего пути, вы можете телепортировать объект рядом с точкой телепорта и перенести его (verry fast) в точку телепорта. – Springrbua

+0

Я уже пытаюсь использовать settransform() в одной из моих игр, но у моего физического тела было соединение с другими бюджетами, поэтому он не работал так, как я хотел, поэтому я сделал это, чтобы телепортировать мои тела: уничтожьте их в точке и заново создайте их в другой точке, и это сработает для меня. – Netero

ответ

2

setTransform метод не багги сам. Это может вызвать некоторые проблемы из-за игнорирования физики, которые могут появиться, когда:

  • с помощью шарниров - суставы обеспечивают некоторое ограничение и это «насильственные» изменения могут сделать органы ведут себя странно
  • столкновение существует - потому что преобразованное тело может быть «толкано» в другое тело

Общая ситуация, когда вы описываете ситуацию, когда setTransform используется, и я не вижу здесь причины бояться этого. Здесь вам также не нужна скорость.


Однако, если вы решите изменить механизм «телепортации» для применения скорости для перемещения объекта в мировой точке вы должны:

  • вычислить вектор скорости путем вычитания заданного положения и положения тела

    Vector2 velocity = target.sub(body.getPosition())); //where target is Vector2 of touched point 
    
  • ограничивают скорость до некоторого максимального Я думаю , если вам нужно (это Optio NAL)

    //optional 
    velocity.nor(); 
    velocity.mul(MAX_VALUE); //MAX_VALUE is a float 
    
  • установить скорость к телу

    body.setLinearVelocity(velocity); 
    
  • добавить в основной цикл (рендеринг метода) проверить, если тело находится в целевом положении (или в каком-то диапазоне - из-за точности там есть небольшой шанс, что он будет точно в цель, если будет ограничивать скорость - если я не предполагаю, что это должно быть в целевом положении после одной итерации world.update())

    if(body.getPosition().sub(target).len() < SOME_PRECISION) 
    { 
        body.setLinearVelocity(new Vector2(0, 0)); 
    } 
    

Вы также можете взглянуть на Box2D MouseJoint, хотя я никогда не использовал это и не могу дать никаких намеков здесь.

+0

Спасибо за это. Я должен попробовать это через несколько часов. –

+0

Работал отлично! Только сейчас ... Скорость моих шаров застряла на максимальной скорости (что я не задал) ... Любые идеи? –

+0

Как он застрял? Что происходит? –

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