![]() |
|
||||||||||
|
|||||
|
Регистрация: 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. |
|
|||||
|
Регистрация: Aug 2011
Сообщений: 53
|
звезда - невыпуклая фигура. в доках остерегают создавать невыпуклые многоугольники. почему?
|
|
|||||
|
Регистрация: Aug 2011
Сообщений: 53
|
в смысле? по очередно вызывать метод CreateFixrure у Боди? одно вторым стираться разве не будет?
Добавлено через 18 минут действительно, двумя полигонами я вроде бы добился нужного мне результат. спасибо. буду тестить. |
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
В доках явно говорится о том, что ,б2д не хранит никаких ссылок на описания тел, и способ создание нескольких фигур в одном теле - единственный верный.
|
|
|||||
|
Регистрация: Aug 2011
Сообщений: 53
|
вращение звезды вокруг своей оси надо реализовывать классами b2RevoluteJoint, b2RevoluteJointDef ? это такая связь между телами, которая позволяет телам только вращаться. что то вроде "связывания болтом"
|
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Да. Если надо чтобы звезда вращалась как бы в воздухе, то крепить ее надо к GroundBody()
|
|
|||||
|
Регистрация: Aug 2011
Сообщений: 53
|
что-то не пойму. как правильно создать "болтовую" связку? у меня постоянно виснит плеер(как будто бесконечный цикл). я видать неправильно настраиваю. что я только не писал в коде из за безвыходности:
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.enableLimit = true; комментируя эти две строки все стает нормально(в смысле плеер не виснет). но связки нету. кто-нибудь может привести работоспособный код с этой связкой?ъ Добавлено через 14 минут 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. |
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Вот кусок кода, где у меня к тачке крепится ведущий мост:
_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 здесь обязательно) Последний раз редактировалось goodguy; 15.11.2011 в 22:16. |
![]() |
![]() |
Часовой пояс GMT +4, время: 19:55. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|