Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   [Box2D] box2d Изменение положения статического тела (http://www.flasher.ru/forum/showthread.php?t=162759)

Furgon 04.08.2011 01:04

box2d Изменение положения статического тела
 
Есть необходимость переместить статическое тело. Использую метод SetPosition, нет никакого результата. При этом динамическое тело таким способом нормально перемещается.
Подскажите как решить проблему?

Alex Lexcuk 04.08.2011 04:22

Я удаляю статическое тело и создаю его заново в новых координатах.

goodguy 04.08.2011 08:46

Из оф мануала:
Цитата:

A static body has does not move under simulation and behaves as if it has infinite mass. Internally, Box2D stores zero for the mass and the inverse mass. Static bodies can be moved manually by the user. A static body has zero velocity. Static bodies do not collide with other static or kinematic bodies.
Но относится это к версии 2.1.0. По поводу более старых версий, на их форуме писали, что тоже не получается переместить статическое тело. И исправили это, как раз в релизе 2.1.0
Правда на счет АС3 версии не знаю. Хотя мне тоже в ближайшем будущем прийдется разобраться в этой проблеме.

Furgon 04.08.2011 19:33

Использую версию 2.1а. Оказывается, что в моем случае дело не в том, что тело статическое. Метод SetPosition не работает в моменты коллизий (вызываю либо из BeginContact, либо из EndContact), как со статическими, так и с динамическими телами. Причем у динамического тела получается изменить его скорость, вращение, а вот позицию нет.
Кто-нибудь знает чем обусловлено данное поведение движка?

Alex Lexcuk 05.08.2011 03:41

Движек расчитывает исходя из физических законов и от этого будет зависеть положение тела, так что в этот момент ставить телу позицию бессмысленно, так как она (позиция) всё равно будет пересчитана.
Можно делать вроде такого
Код AS3:

world.Step(timestep, iterations, iterations);
world.ClearForces();
mySetPosition();

те. доставлять позицию.


Часовой пояс GMT +4, время: 01:12.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.