Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   [Box2D] b2RevoluteJointDef.enableMotor (http://www.flasher.ru/forum/showthread.php?t=171888)

Silencе 26.11.2011 13:51

b2RevoluteJointDef.enableMotor
 
Код AS3:

           var _frontWheelJoint:b2RevoluteJoint = _mapBase.world.CreateJoint(_jointDef) as b2RevoluteJoint;
 
            var revoluteJointDef:b2RevoluteJointDef = new b2RevoluteJointDef();
            revoluteJointDef.Initialize(bodyBit1_, _mapBase.world.GetGroundBody(), bodyBit1_.GetWorldCenter());
            revoluteJointDef.maxMotorTorque = 1;
            revoluteJointDef.enableMotor = true;
 
            _mapBase.world.CreateJoint(revoluteJointDef);

почему этот код вешает флешку?(как будто бесконечный цикл обрабатывает)
если закомментировать
Код AS3:

 revoluteJointDef.enableMotor = true;

, то флешка виснеть перестает, но без этой строки весь остальной код теряет смысл

goodguy 26.11.2011 15:06

Проблема в чем-то другом

Silencе 26.11.2011 15:43

Код AS1/AS2:

            var bodyBit1_:b2Body;
            var bodyDef_:b2BodyDef;
            var polygonShape_:b2PolygonShape;
            var fixtureDef_:b2FixtureDef;
 
            var hStage_:int = _mapBase.stage.stageHeight;
            var wStage_:int = _mapBase.stage.stageWidth;
            var wallThickness_:Number = 5; //толщина стены в пикселях
 
            bodyDef_ = new b2BodyDef();
            bodyDef_.position.Set((wallThickness_ + 60) / METERS, (hStage - wallThickness_ - 48 * 2) / METERS); // позиция
            bodyDef_.type = b2Body.b2_dynamicBody;
            polygonShape_ = new b2PolygonShape();
            polygonShape_.SetAsArray([b2Vec2.Make(-10 / METERS, -10 / METERS), b2Vec2.Make(70 / METERS, 0 / METERS), b2Vec2.Make(-10 / METERS, 10 / METERS)]); // фигура треугольника
            bodyBit1_ = _mapBase.world.CreateBody(bodyDef_);
            fixtureDef_ = new b2FixtureDef();
            fixtureDef_.shape = polygonShape_;
            bodyBit1_.SetUserData("bit 1");
            bodyBit1_.CreateFixture(fixtureDef_);
 
 
            // Дальше идет код, который я уже постил выше. Джоинт:
            var _frontWheelJoint:b2RevoluteJoint = _mapBase.world.CreateJoint(_jointDef) as b2RevoluteJoint;
 
            var revoluteJointDef:b2RevoluteJointDef = new b2RevoluteJointDef();
            revoluteJointDef.Initialize(bodyBit1_, _mapBase.world.GetGroundBody(), bodyBit1_.GetWorldCenter());
            revoluteJointDef.maxMotorTorque = 1;
            revoluteJointDef.enableMotor = true;
 
            _mapBase.world.CreateJoint(revoluteJointDef);

все переменные локальны

goodguy 26.11.2011 16:22

Как выглядит код обновляющий мир?

Silencе 26.11.2011 16:36

Код AS3:

 private function update(event:Event):void {
            world.Step(1 / METERS, 10, 10);
            world.ClearForces();
            world.DrawDebugData();
        } //End function

METERS = 30

Добавлено через 1 час 19 минут
у кого нибудь есть код с работающим джоинтом и enableMotor? желательно чтобы с кодом тела (которое крепится)

Добавлено через 1 час 43 минуты
вот так заработало:

Код AS3:

//////////////////////////
            //bit 1
            //var bodyBit1_:b2Body;
            var bodyBit1_1_:b2Body;
            var bodyBit1_:b2Body;
 
            bodyDef_ = new b2BodyDef();
            // bodyDef_.position.Set((wallThickness_ + 60) / METERS, (_mapBase.stage.stageHeight - wallThickness_ - 30) / METERS);
            bodyDef_.position.Set((wallThickness_ + 90) / METERS, (_mapBase.stage.stageHeight - wallThickness_ - 70) / METERS);
            bodyDef_.type = b2Body.b2_staticBody;
            polygonShape_ = new b2PolygonShape();
            polygonShape_.SetAsBox(4 / METERS, 30 / METERS);
            bodyBit1_1_ = _mapBase.world.CreateBody(bodyDef_);
            fixtureDef_ = new b2FixtureDef();
            fixtureDef_.shape = polygonShape_;
            bodyBit1_1_.SetUserData("bit 1-");
            bodyBit1_1_.CreateFixture(fixtureDef_);
 
 
            bodyDef_ = new b2BodyDef();
            bodyDef_.position.Set((wallThickness_ + 60) / METERS, (_mapBase.stage.stageHeight - wallThickness_ - 48 * 2) / METERS);
            bodyDef_.type = b2Body.b2_dynamicBody;
            bodyDef_.allowSleep = false;
            polygonShape_ = new b2PolygonShape();
            polygonShape_.SetAsArray([b2Vec2.Make(-10 / METERS, -10 / METERS), b2Vec2.Make(70 / METERS, 0 / METERS), b2Vec2.Make(-10 / METERS, 10 / METERS)]);
            bodyBit1_ = _mapBase.world.CreateBody(bodyDef_);
            fixtureDef_ = new b2FixtureDef();
            fixtureDef_.density = 0.5
            fixtureDef_.friction = 0.5;
            fixtureDef_.restitution = 0.5
            fixtureDef_.shape = polygonShape_;
            bodyBit1_.SetUserData("bit 1");
            bodyBit1_.CreateFixture(fixtureDef_);
 
            // bodyBit1_.SetAngle(Math.PI / 6);
            //bodyBit1_.SetAngle(Math.PI / 6);
            trace(bodyBit1_.GetAngle());
 
            var _jointDef:b2RevoluteJointDef = new b2RevoluteJointDef();
            _jointDef.bodyA = bodyBit1_;
            _jointDef.bodyB = bodyBit1_1_;
 
            _jointDef.localAnchorA = new b2Vec2(bodyBit1_.GetLocalCenter().x / METERS, bodyBit1_.GetLocalCenter().y / METERS);
            _jointDef.localAnchorB = new b2Vec2(0 / METERS, -25 / METERS);
            /*      _jointDef.lowerAngle = b2Settings.b2_pi / 6; // -90 degrees
            _jointDef.upperAngle = 0.25 * b2Settings.b2_pi // 45 degrees
            _jointDef.enableLimit = true;*/

 
            // _jointDef.motorSpeed = 20;
            _jointDef.maxMotorTorque = 20;
            _jointDef.motorSpeed = 20;
            _jointDef.enableMotor = true;
            var _frontWheelJoint:b2RevoluteJoint = _mapBase.world.CreateJoint(_jointDef) as b2RevoluteJoint;

первоначальный код не работал потому что не было строки _jointDef.motorSpeed = 20 , но я же ее(строку) по нескольку раз сувал в разные места - все равно не работало. вообщем хз.


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

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