Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > API приложений и сред

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 14.11.2011, 00:24
Silencе вне форума Посмотреть профиль Отправить личное сообщение для Silencе Найти все сообщения от Silencе
  № 1  
Ответить с цитированием
Silencе

Регистрация: Aug 2011
Сообщений: 53
По умолчанию связка фигур

мне нужно сделать 4х конечную звезду, которая будет вращаться по окружности вокруг своей оси. http://ru.wikipedia.org/wiki/Звезда_(геометрия)
я так понимаю это 4ре треугольника. их нужно связать друг с другом. в бокс2д существуют разные типы связок => думаю для моих целей подходит b2WeldJoint && b2WeldJointDef. я не знаю технических деталей. но думаю, если не получится склеить треугольники между собой("не за что склеивать"), то можно будет ввести квадрат, к сторонам которого можно будет приклеить основания треугольников.
у меня довольно немного опыта и плохо с пониманием английского языка, поэтому мне довольно сложно понять как реализовать нужную мне вещь. а если точнее, я не знаю как необходимо оперировать классами weldJointDef and weldJoint , в документации этих классов нету(документация к 2.0.2, а в этой версии наверное не было этой связки). эти классы есть в хелпе, но там лишь описание методов, и то на английском.
у кого нибудь есть примеры кода с этими классами? в шаре я к сожалению не нашел.

Добавлено через 6 минут
http://aswebcreations.com/?p=920
если вопросы будут, задам сюда)


Последний раз редактировалось Silencе; 14.11.2011 в 00:26.
Старый 14.11.2011, 01:05
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 2  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Еще это может быть один полигон.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 14.11.2011, 01:55
Silencе вне форума Посмотреть профиль Отправить личное сообщение для Silencе Найти все сообщения от Silencе
  № 3  
Ответить с цитированием
Silencе

Регистрация: Aug 2011
Сообщений: 53
звезда - невыпуклая фигура. в доках остерегают создавать невыпуклые многоугольники. почему?

Старый 14.11.2011, 02:16
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 4  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Видимо считать тяжелее, и лучи могут "проваливаться".
Ок 2 полигона, через CreateFixture не покатит?
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 14.11.2011, 02:34
Silencе вне форума Посмотреть профиль Отправить личное сообщение для Silencе Найти все сообщения от Silencе
  № 5  
Ответить с цитированием
Silencе

Регистрация: Aug 2011
Сообщений: 53
в смысле? по очередно вызывать метод CreateFixrure у Боди? одно вторым стираться разве не будет?

Добавлено через 18 минут
действительно, двумя полигонами я вроде бы добился нужного мне результат. спасибо. буду тестить.

Старый 14.11.2011, 08:39
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 6  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
В доках явно говорится о том, что ,б2д не хранит никаких ссылок на описания тел, и способ создание нескольких фигур в одном теле - единственный верный.

Старый 14.11.2011, 15:15
Silencе вне форума Посмотреть профиль Отправить личное сообщение для Silencе Найти все сообщения от Silencе
  № 7  
Ответить с цитированием
Silencе

Регистрация: Aug 2011
Сообщений: 53
вращение звезды вокруг своей оси надо реализовывать классами b2RevoluteJoint, b2RevoluteJointDef ? это такая связь между телами, которая позволяет телам только вращаться. что то вроде "связывания болтом"

Старый 14.11.2011, 15:22
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 8  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Да. Если надо чтобы звезда вращалась как бы в воздухе, то крепить ее надо к GroundBody()

Старый 15.11.2011, 02:28
Silencе вне форума Посмотреть профиль Отправить личное сообщение для Silencе Найти все сообщения от Silencе
  № 9  
Ответить с цитированием
Silencе

Регистрация: Aug 2011
Сообщений: 53
что-то не пойму. как правильно создать "болтовую" связку? у меня постоянно виснит плеер(как будто бесконечный цикл). я видать неправильно настраиваю. что я только не писал в коде из за безвыходности:
Код AS1/AS2:
           var loc_bd:b2BodyDef;
            loc_bd = new b2BodyDef();
            loc_bd.position.Set(150 / _METERS, 250 / _METERS);
            loc_bd.type = b2Body.b2_kinematicBody;
            var loc_bodyBox:b2Body;
            loc_bodyBox = _world.CreateBody(loc_bd);
            var loc_PolygonShape:b2PolygonShape = new b2PolygonShape();
            loc_PolygonShape.SetAsArray([b2Vec2.Make(0.25, -0.25), b2Vec2.Make(0.25, 0.25), b2Vec2.Make(-0.25, 0.25), b2Vec2.Make(-0.25, -0.25)]);
            var loc_fd:b2FixtureDef = new b2FixtureDef();
            loc_fd.shape = loc_PolygonShape;
            loc_fd.userData = "box1";
            loc_bodyBox.CreateFixture(loc_fd);
 
            var rjd:b2RevoluteJointDef = new b2RevoluteJointDef();
            rjd.Initialize(loc_bodyStar2, loc_bodyBox, b2Vec2.Make(150 / _METERS, 250 / _METERS));
            // rjd.enableLimit = true;
            //rjd.maxMotorTorque = 3
            //rjd.motorSpeed = 3
            rjd.lowerAngle = 0.5 * Math.PI; // -90 градусов
            rjd.upperAngle = 0.25 * Math.PI; // 45 градусов
         //   rjd.enableLimit = true;
            rjd.maxMotorTorque = 10.0;
            rjd.motorSpeed = 2;
         //  rjd.enableMotor = true;
            _world.CreateJoint(rjd);
// rjd.enableMotor = true;
// rjd.enableLimit = true;
комментируя эти две строки все стает нормально(в смысле плеер не виснет). но связки нету.
кто-нибудь может привести работоспособный код с этой связкой?ъ

Добавлено через 14 минут
Код AS1/AS2:
     var loc_bd:b2BodyDef;
            loc_bd = new b2BodyDef();
            loc_bd.position.Set(150 / _METERS, 250 / _METERS);
            loc_bd.type = b2Body.b2_kinematicBody;
            var loc_bodyBox:b2Body;
            loc_bodyBox = _world.CreateBody(loc_bd);
            var loc_PolygonShape:b2PolygonShape = new b2PolygonShape();
            loc_PolygonShape.SetAsArray([b2Vec2.Make(0.25, -0.25), b2Vec2.Make(0.25, 0.25), b2Vec2.Make(-0.25, 0.25), b2Vec2.Make(-0.25, -0.25)]);
            var loc_fd:b2FixtureDef = new b2FixtureDef();
            loc_fd.shape = loc_PolygonShape;
            loc_fd.userData = "box1";
            loc_bodyBox.CreateFixture(loc_fd);
 
            var rjd:b2RevoluteJointDef = new b2RevoluteJointDef();
            rjd.Initialize(loc_bodyStar2, loc_bodyBox, loc_bodyStar2.GetWorldCenter());
            // rjd.enableLimit = true;
            /*rjd.lowerAngle = 0;
             rjd.upperAngle = 0.1;*/
            //rjd.maxMotorTorque = 3
            //rjd.motorSpeed = 3
           /* rjd.lowerAngle = 0.5 * Math.PI; // -90 градусов
            rjd.upperAngle = 0.25 * Math.PI; // 45 градусов
           rjd.enableLimit = true;
            rjd.maxMotorTorque = 1;
            rjd.motorSpeed = 1;
           rjd.enableMotor = true;*/
            _world.CreateJoint(rjd);
            loc_bodyStar2.SetLinearVelocity(b2Vec2.Make(0,1));
так тоже виснет плеер

Добавлено через 11 часов 53 минуты
еще момент, как создаются сложные фигуры? например мне нужно создать закругленную дорожку по которой катитася мячик. как необходимо сделать закругленные бортики? типа в C-образной форме


Последний раз редактировалось Silencе; 15.11.2011 в 02:37.
Старый 15.11.2011, 22:10
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 10  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Вот кусок кода, где у меня к тачке крепится ведущий мост:
Код AS3:
_jointDef 			= new b2RevoluteJointDef();
_jointDef.bodyA 		= _body; // машина
_jointDef.bodyB 		= _frontWheel; // сам передний мост
 
var carCenterPoint:	Point 	= new Point(_body.GetWorldCenter().x, _body.GetWorldCenter().y);				// крепление ведущего моста
var attachX:		Number	= _body.GetPosition().x + Math.cos(_body.GetAngle()) * _axisOffset; // отставляю мост от центра машины ближе к переду
var attachY:		Number	= _body.GetPosition().y - Math.sin(_body.GetAngle()) * _axisOffset;
 
_jointDef.localAnchorA 		= _body.GetLocalPoint(new b2Vec2(attachX, attachY)); // создаю точки крепления
_jointDef.localAnchorB 		= _frontWheel.GetLocalPoint(new b2Vec2(_frontWheel.GetWorldCenter().x, _frontWheel.GetWorldCenter().y));
_frontWheelJoint 		= _world.CreateJoint(_jointDef) as b2RevoluteJoint; // и, собственно, сам шарнир ( приведение к типу b2RevoluteJoint  здесь обязательно)
[IMG]http://dl.************/u/25927940/2011-11-16_001315.jpg[/IMG]


Последний раз редактировалось goodguy; 15.11.2011 в 22:16.
Создать новую тему Ответ Часовой пояс GMT +4, время: 18:09.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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