![]() |
|
||||||||||
|
|||||
|
Регистрация: Aug 2011
Сообщений: 53
|
и все же, и все же.. вопрос открытый - как с минимум трудозатрат создать нужную мне произвольную фигуру? например хочу я создать трассу и чтобы эту трассу по бокам ограничивали стенки.(т.е. фактически две параллельные кривые).
допустим, когда рисуешь кривую в редакторе, как можно потом эту кривую разбить на отрезки?(не в ручную разумеется). я слышал что в coreldraw можно нарисовать нужную мне фигуру, во что то ее экспортить, а потом это произведение скормить боксу. может кто нибудь знает о чем речь шла? |
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Цитата:
Цитата:
|
|
|||||
|
Регистрация: Aug 2011
Сообщений: 53
|
да так то игры небольшая, лень заморачиваться. просто бокс уже довольно взрослая либа, должно уже по нескольку раз все обсосано
|
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Цитата:
Есть еще на его основе либа QuickBox2d. Там подобные задачи выполнить проще |
|
|||||
|
Регистрация: Aug 2011
Сообщений: 53
|
если динамическое тело - мяч. и статическое тело, состоящее из двух шейпов в одном Боди.
при столкновение тел мое тело (динамическое) пролетает сквозь статическое тело. при этом динамическое тело тратит свою энергию на совершение работы по преодолению сопротивления статического тела. // Статическое тело: var bodyDef_:b2BodyDef; var polygonShape_:b2PolygonShape; var fixtureDef_:b2FixtureDef; var bodyLine_:b2Body; var wallStageThickness_:Number = 3; var ballDiameter_:Number = 20; // init bodyDef_ = new b2BodyDef(); bodyDef_.position.Set((_mapBase.stage.stageWidth - (wallStageThickness_ + ballDiameter_ + 10)) / METERS, _mapBase.stage.stageHeight / METERS); bodyDef_.type = b2Body.b2_staticBody; bodyLine_ = _mapBase.world.CreateBody(bodyDef_); polygonShape_ = new b2PolygonShape(); fixtureDef_ = new b2FixtureDef(); //первый шейп polygonShape_.SetAsBox(wallStageThickness_ / METERS, -450 / METERS); fixtureDef_.shape = polygonShape_; bodyLine_.CreateFixture(fixtureDef_); //второй шейп polygonShape_.SetAsArray([bodyLine_.GetLocalPoint(b2Vec2.Make(375 / METERS, 90 / METERS)), bodyLine_.GetLocalPoint(b2Vec2.Make(364 / METERS, 56 / METERS)), bodyLine_.GetLocalPoint(b2Vec2.Make(367 / METERS, 56 / METERS)), bodyLine_.GetLocalPoint(b2Vec2.Make(378 / METERS, 90 / METERS))]); fixtureDef_.shape = polygonShape_; bodyLine_.CreateFixture(fixtureDef_); вот так вот: polygonShape_.SetAsBox(wallStageThickness_ / METERS, 450 / METERS); // убрали "-" перед 450 ладно с этим разобрался. но в этом же теле существует другой шейп: //второй шейп polygonShape_.SetAsArray([bodyLine_.GetLocalPoint(b2Vec2.Make(375 / METERS, 90 / METERS)), bodyLine_.GetLocalPoint(b2Vec2.Make(364 / METERS, 56 / METERS)), bodyLine_.GetLocalPoint(b2Vec2.Make(367 / METERS, 56 / METERS)), bodyLine_.GetLocalPoint(b2Vec2.Make(378 / METERS, 90 / METERS))]); fixtureDef_.shape = polygonShape_; bodyLine_.CreateFixture(fixtureDef_); Добавлено через 1 час 25 минут ответ: для каждой фигуры(именно фигура, не путать с Телом = тело может состоять из нескольких фигур) нужно создавать отдельный bodyDef_ и переназначь позицию: //Статическое тело bodyDef_ = new b2BodyDef(); bodyDef_.position.Set((_mapBase.stage.stageWidth - (wallStageThickness_ + ballDiameter_ + 10)) / METERS, _mapBase.stage.stageHeight / METERS); bodyDef_.type = b2Body.b2_staticBody; bodyLine_ = _mapBase.world.CreateBody(bodyDef_); polygonShape_ = new b2PolygonShape(); fixtureDef_ = new b2FixtureDef(); // Первый шейп polygonShape_.SetAsBox(wallStageThickness_ / METERS, 450 / METERS); fixtureDef_.shape = polygonShape_; bodyLine_.CreateFixture(fixtureDef_); // Второй шейп bodyDef_ = new b2BodyDef(); bodyDef_.position.Set(375 / METERS, 90 / METERS); polygonShape_ = new b2PolygonShape(); polygonShape_.SetAsEdge(b2Vec2.Make(5/METERS, 0/METERS), b2Vec2.Make(-20/METERS, -20/METERS)); bodyLine_ = _mapBase.world.CreateBody(bodyDef_); fixtureDef_.userData = "left"; fixtureDef_.shape = polygonShape_; bodyLine_.CreateFixture(fixtureDef_); [quote=Silencе;1047248]если динамическое тело - мяч. и статическое тело, состоящее из двух шейпов в одном Боди. при столкновение тел мое тело (динамическое) пролетает сквозь статическое тело. при этом динамическое тело тратит свою энергию на совершение работы по преодолению сопротивления статического тела. // Статическое тело: var bodyDef_:b2BodyDef; var polygonShape_:b2PolygonShape; var fixtureDef_:b2FixtureDef; var bodyLine_:b2Body; var wallStageThickness_:Number = 3; var ballDiameter_:Number = 20; // init bodyDef_ = new b2BodyDef(); bodyDef_.position.Set((_mapBase.stage.stageWidth - (wallStageThickness_ + ballDiameter_ + 10)) / METERS, _mapBase.stage.stageHeight / METERS); bodyDef_.type = b2Body.b2_staticBody; bodyLine_ = _mapBase.world.CreateBody(bodyDef_); polygonShape_ = new b2PolygonShape(); fixtureDef_ = new b2FixtureDef(); //первый шейп polygonShape_.SetAsBox(wallStageThickness_ / METERS, -450 / METERS); fixtureDef_.shape = polygonShape_; bodyLine_.CreateFixture(fixtureDef_); //второй шейп polygonShape_.SetAsArray([bodyLine_.GetLocalPoint(b2Vec2.Make(375 / METERS, 90 / METERS)), bodyLine_.GetLocalPoint(b2Vec2.Make(364 / METERS, 56 / METERS)), bodyLine_.GetLocalPoint(b2Vec2.Make(367 / METERS, 56 / METERS)), bodyLine_.GetLocalPoint(b2Vec2.Make(378 / METERS, 90 / METERS))]); fixtureDef_.shape = polygonShape_; bodyLine_.CreateFixture(fixtureDef_); вот так вот: polygonShape_.SetAsBox(wallStageThickness_ / METERS, 450 / METERS); // убрали "-" перед 450 ладно с этим разобрался. но в этом же теле существует другой шейп: //второй шейп polygonShape_.SetAsArray([bodyLine_.GetLocalPoint(b2Vec2.Make(375 / METERS, 90 / METERS)), bodyLine_.GetLocalPoint(b2Vec2.Make(364 / METERS, 56 / METERS)), bodyLine_.GetLocalPoint(b2Vec2.Make(367 / METERS, 56 / METERS)), bodyLine_.GetLocalPoint(b2Vec2.Make(378 / METERS, 90 / METERS))]); fixtureDef_.shape = polygonShape_; bodyLine_.CreateFixture(fixtureDef_); Добавлено через 1 час 25 минут /*неверно*/ Добавлено через 5 часов 37 минут var body:b2Body; //тело var bodyDef:b2BodyDef; //геометрические настройки тела var bodyShapePoligon:b2PolygonShape; var wallThickness:Number = 5; //толщина стены в пикселях var fixDef:b2FixtureDef = new b2FixtureDef(); //right bodyDef = new b2BodyDef(); //создаем b2BodyDef bodyDef.position.Set(156 / METERS, 108 / METERS); bodyShapePoligon = new b2PolygonShape(); bodyShapePoligon.SetAsArray([b2Vec2.Make(0 / METERS, 0 / METERS), b2Vec2.Make(-13 / METERS, 11 / METERS), b2Vec2.Make(-20 / METERS, 47 / METERS)]); body = _mapBase.world.CreateBody(bodyDef);//создаем тело fixDef.userData = "right"; fixDef.shape = bodyShapePoligon; body.CreateFixture(fixDef); Добавлено через 5 часов 48 минут в коде выше изменяем метод SetAssArray bodyShapePoligon.SetAsArray([b2Vec2.Make(10 / METERS, -10 / METERS), b2Vec2.Make(-10 / METERS, -10 / METERS), b2Vec2.Make(0 / METERS, -37 / METERS)]); а теперь повернем треугольник на 90 градусов: мяч вновь пролетает! wtf?! Последний раз редактировалось Silencе; 21.11.2011 в 04:26. |
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
У определения тела есть свойство isBullet. Его нужно поставить true в таком случае. Так же у тела есть метод SetBullet(value:Boolean);
При назначении тела пулей, просчеты для него происходят в десять раз чаще. Это стоит спользовать для быстродвижущихся тел. |
|
|||||
|
Регистрация: Aug 2011
Сообщений: 53
|
вроде трабла в том, что я строил полигон не по часовой стрелке.
|
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
это значения не имеет
Полигон строится в соответствии с порядком расположения точек в массиве, а не по часовой стрелке |
|
|||||
|
Регистрация: Aug 2011
Сообщений: 53
|
в моем случаи проблема была в том что я расположил вершины в массиве против часовой стрелки.
SetAsArray([....]) - надо вершины располагать по часовой стрелки. а я как раз таки делал в точности до наоборот - против часовой стрелки. |
![]() |
![]() |
Часовой пояс GMT +4, время: 01:14. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|