Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   [Box2D] объекты не получают вращательный импульс при столкновении (http://www.flasher.ru/forum/showthread.php?t=172963)

anmelegov 21.12.2011 01:29

объекты не получают вращательный импульс при столкновении
 
а падают как куски говна... я тут даже не знаю какой код прикреплять потому что не знаю в чем может быть дело

Добавлено через 56 минут
и джоинты не крутятся

Добавлено через 2 часа 7 минут
почему вообще могут не вращаться тела, кроме случаев когда принудительно задано angularSpeed?

Добавлено через 2 часа 25 минут
треугольник падает на поверхность углом который смещен по оси Х от центра масс и стоит на этом угле... джоинты тоже не крутятся

goodguy 21.12.2011 07:31

Чудеса да и только :D
Какой смысл создавать такие темы? Здесь что, форум экстрасенсов и телепатов?

Все там нормально падает и вращается. Если этого не происходит, значит код кривой, и движок тут ни при чем. Могу предположить только одно, телам не задано трение, упругость и плотность.

anmelegov 21.12.2011 11:28

задано трение и масса... остальное обязательно?

goodguy 21.12.2011 11:52

Цитата:

задано трение и масса...
Масса? Через b2Mass?
Цитата:

остальное обязательно?
Конечно обязательно. Это же физический движок.

anmelegov 21.12.2011 12:10

масса задана через SetMassData ... я думал там есть какие-то значения по умолчанию потому что если ниче не задавать то гравитация на тела всеравно действует а при столкновении удары не абсолютно упругие

goodguy 21.12.2011 12:26

friction
restitution
density
задавать нужно обязательно

anmelegov 21.12.2011 12:31

т.е. я должен сам расчитывать плотность деля массу на интеграл по плоскости сложной фигуры или есть какой-то специальный метод?

Добавлено через 53 секунды
просто сейчас не дома проверить не могу... у меня флэш на виртуалке дома стоит

goodguy 21.12.2011 12:53

можно расчитывать, а можно просто задать от фонаря. Это обычно величины в диапазоне от 0 до 1

anmelegov 21.12.2011 16:18

всем спасибо.. похоже осталась только проблема с джоинтами но это я уже сам в силах решить

Добавлено через 1 час 18 минут
джоинт якорил мимо треугольника =)

FieryWall 21.12.2011 17:38

Цитата:

Сообщение от goodguy (Сообщение 1052798)
friction
restitution
density
задавать нужно обязательно

странно, я только density ставлю и все идеально :)

goodguy 21.12.2011 20:12

что именно идеально? При соударении фигур они каким-то образом узнают как надо "тирануться" друг о друга не имея трения?

FieryWall 21.12.2011 21:25

там умолчания

goodguy 22.12.2011 07:22

А, ну да, для трения есть 0.2
но остальное, не менее важное при столкновении фигур:
Код AS3:

restitution = 0.0; // упругость
density = 0.0; // плотность


anmelegov 22.12.2011 22:54

все похоже разобрался с этим движком вроде сейчас все получается но тут возник новый вопрос.. новую тему создавать не буду потому что эта еще вроде не "утонула"... В общем задача в следующем: у меня есть скелет тела человека со револют джоинтами в суставах и мне его надо посадить, допустим на мотоцикл, я несколько часов на бумажке высчитывал координаты в метрах куда крепить якоря и мне этот подход показался не очень рациональным... Вопрос следующий: есть ли какие-то методики или может даже специальные редакторы, с помощью которых можно высчитывать положения блоков относительно друг-друга в метрах?

Добавлено через 1 минуту
или как это делаете вы?

GBee 22.12.2011 23:46

Вопрос как раз для новой темы.

FieryWall 23.12.2011 17:19

anmelegov, вы тратите время, вам необходим класс для парсинга ваших объектов

anmelegov 23.12.2011 18:32

спасибо, хорошо что до создания уровней я еще не дошел.. буду осваивать новый для меня способ...

goodguy 23.12.2011 19:41

я бы посоветовал не лениться, а разобраться со всем самому, вместо использования всех этих "классов для парсинга"
Одно дело - когда нужен быстрый результат, а другое, когда нужны знания.

anmelegov 23.12.2011 21:34

а как сделать джоинты жестче? у меня моцик при езде таранит свое переднее колесо =) в документации ничего такого не нашел... неужели придется несколько джоинтов ставить в одну точку?

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

goodguy 23.12.2011 21:39

Что значит "жестче"? Они и так максимально жесткие. Много шарниров ничего не дадут. Чтобы он не таранил свое колесо, можно сделать колесу битовую категорию отличную от умолчания, например
Код AS3:

_wheelFixtureDef.filter.categoryBits = 0x0002;

а другим телам мотоцикла ее замаскировать:
Код AS3:

_bicycleBodyFixtureDef.filter.maskBits = ~0x0002;

Так он точно не будет свое колесо таранить

anmelegov 23.12.2011 21:59

ну нельзя так нельзя

Добавлено через 1 минуту
трение уменьшу будет скользить

goodguy 23.12.2011 22:05

причем тут трение вообще?
Я этот способ юзаю постоянно, и все работает отлично.

anmelegov 23.12.2011 22:17

я так тоже делаю, но в данном случае будет выглядеть не очень если колесо будет в раму входить

anmelegov 28.12.2011 02:11

а как быть если в одной точке несколько джоинтов и несколько тел? хитТестПоинт() тут уже не проканает

FieryWall 28.12.2011 17:46

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

anmelegov 20.01.2012 23:01

я че-то не могу вкурить.. делаю вот так
Код AS3:

for(var i:int = 0; i < mClip.numChildren; i++){
                                sprite = mClip.getChildAt(i) as Sprite;
                                _angle = sprite.rotation * Math.PI/180;
                                sprite.rotation = 0;
                                _width = sprite.width / m2p;
                                _height = sprite.height / m2p;
                                _position.Set(sprite.x / m2p, sprite.y / m2p);
                                switch (sprite.name) {
                                        case 'player':
                                                new Player();
                                                break;
                                        case 'backGround':
                                                LevelVars.sprite = new Sprite();
                                                LevelVars.sprite.addChild(sprite);
                                                break;
                                        case 'staticBox':
                                                new StaticBox(_position.x, _position.y, _width, _height, _angle);
                                                break;
                                        case 'staticTriangle':
                                                new StaticTriangle(_position, _width, _height, _angle);
                                                break;
                                        ...
                                }
                        }

и следующий объект после backGround просто исчезает... если закомментировать строчку:
Код AS1/AS2:

LevelVars.sprite.addChild(sprite);

то он появляется обратно... если протрейсить нумЧилдрен то становится на 1 больше.... почему так?

Добавлено через 50 секунд
а еще бонус вопрос: чем отличаются одинарные кавычки от двойных?

Добавлено через 20 минут
немного объясню LevelVars.sprite это не тот спрайт который я парсю, это другой который с mClip никак не связан, и если я добавляю строчку LevelVars.sprite.addChild(sprite); то в mClip становится на одного чаилда меньше (причем даже если трейсить раньше этой строки)

Добавлено через 62 часа 47 минут
распетлял


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

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