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

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

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

Регистрация: Aug 2013
Сообщений: 2
Post Не получается настроить амортизаторы

Юзаю box2dflash 2.1a, сделал тачку, но никак не могу правильно настроить амортизацию, выходит как то не естественно (колесики дергаются, не амортизируются нифига).


Код AS1/AS2:
package {
	import flash.display.Bitmap;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.KeyboardEvent;
    import Box2D.Dynamics.*;
    import Box2D.Collision.*;
    import Box2D.Collision.Shapes.*;
    import Box2D.Common.Math.*;
    import Box2D.Dynamics.Joints.*;
	import flash.utils.getDefinitionByName;
    public class Car extends Sprite {
        private const degreesToRadians:Number=0.0174532925;
        //
        //private var world:b2World=new b2World(new b2Vec2(0,10),true);
        //private var worldScale:int=30;
		public var physicsData:PhysicsData = new PhysicsData(); // создадим объект, который содержит данные о шейпах
        public var car:b2Body;
        public var leftWheelRevoluteJoint:b2RevoluteJoint;
        public var rightWheelRevoluteJoint:b2RevoluteJoint;
        private var left:Boolean=false;
        private var right:Boolean=false;
        public var motorSpeed:Number=0;
        private var leftAxlePrismaticJoint:b2PrismaticJoint;
        private var rightAxlePrismaticJoint:b2PrismaticJoint;
        //
        private var carPosX:Number=100;
        private var carPosY:Number=200;
        private var carWidth:Number=70;
        private var carHeight:Number=10;
        private var axleContainerDistance:Number=42;
        private var axleContainerWidth:Number=15;
        private var axleContainerHeight:Number=11;
        private var axleContainerDepth:Number=15;
        private var axleAngle:Number=20;
        private var wheelRadius:Number=15;
		private var bitmap:Bitmap;
		private var _sprite:Sprite;
        public function Car():void {
            //debugDraw();
            // ************************ THE FLOOR ************************ //
            /*var floorShape:b2PolygonShape = new b2PolygonShape();
            floorShape.SetAsBox(640/worldScale,10/worldScale);
            var floorFixture:b2FixtureDef = new b2FixtureDef();
            floorFixture.density=0;
            floorFixture.friction=10;
            floorFixture.restitution=0;
            floorFixture.shape=floorShape;
            var floorBodyDef:b2BodyDef = new b2BodyDef();
            floorBodyDef.position.Set(320/worldScale,480/worldScale);
            var floor:b2Body=world.CreateBody(floorBodyDef);
            floor.CreateFixture(floorFixture);*/
            // ************************ THE CAR ************************ //
            var carShape:b2PolygonShape = new b2PolygonShape();
			var carFixture:b2FixtureDef = new b2FixtureDef();
            //carShape.SetAsBox(carWidth/PhysiVals.RATIO,carHeight/PhysiVals.RATIO);
			carShape.SetAsArray(([ //неправильный многоугольник 1
										 b2Vec2.Make( -90 / PhysiVals.RATIO, 23 / PhysiVals.RATIO),
										 b2Vec2.Make( -90 / PhysiVals.RATIO,  -9 / PhysiVals.RATIO),
										 b2Vec2.Make( -66 / PhysiVals.RATIO,  -9 / PhysiVals.RATIO),
										 b2Vec2.Make( -45 / PhysiVals.RATIO,  -29 / PhysiVals.RATIO),
										 b2Vec2.Make( 13 / PhysiVals.RATIO,  -29 / PhysiVals.RATIO),
										 b2Vec2.Make( 42 / PhysiVals.RATIO,  -5 / PhysiVals.RATIO),
										 b2Vec2.Make( 87 / PhysiVals.RATIO,  2 / PhysiVals.RATIO),
										 b2Vec2.Make( 85 / PhysiVals.RATIO,  23 / PhysiVals.RATIO),
										 ]), 8);
 
            var carFixture:b2FixtureDef = new b2FixtureDef();
            carFixture.density=5;
            carFixture.friction=3;
            carFixture.restitution=0.3;
            carFixture.filter.groupIndex=-1;
            carFixture.shape = carShape;
 
            var carBodyDef:b2BodyDef = new b2BodyDef();
            carBodyDef.position.Set(carPosX/PhysiVals.RATIO,carPosY/PhysiVals.RATIO);
            carBodyDef.type = b2Body.b2_dynamicBody;
 
 
            // ************************ LEFT AXLE CONTAINER ************************ //
            var leftAxleContainerShape:b2PolygonShape = new b2PolygonShape();
            leftAxleContainerShape.SetAsOrientedBox(axleContainerWidth/PhysiVals.RATIO,axleContainerHeight/PhysiVals.RATIO,new b2Vec2(-axleContainerDistance/PhysiVals.RATIO,axleContainerDepth/PhysiVals.RATIO),axleAngle*degreesToRadians);
            var leftAxleContainerFixture:b2FixtureDef = new b2FixtureDef();
            leftAxleContainerFixture.density=3;
            leftAxleContainerFixture.friction=5;
            leftAxleContainerFixture.restitution=1;
            leftAxleContainerFixture.filter.groupIndex=-1;
            leftAxleContainerFixture.shape=leftAxleContainerShape;
            // ************************ RIGHT AXLE CONTAINER ************************ //
            var rightAxleContainerShape:b2PolygonShape = new 
            b2PolygonShape();
            rightAxleContainerShape.SetAsOrientedBox(axleContainerWidth/PhysiVals.RATIO,axleContainerHeight/PhysiVals.RATIO,new b2Vec2(axleContainerDistance/PhysiVals.RATIO,axleContainerDepth/PhysiVals.RATIO),-axleAngle*degreesToRadians);
            var rightAxleContainerFixture:b2FixtureDef = new 
            b2FixtureDef();
            rightAxleContainerFixture.density=3;
            rightAxleContainerFixture.friction=5;
            rightAxleContainerFixture.restitution=1;
            rightAxleContainerFixture.filter.groupIndex=-1;
            rightAxleContainerFixture.shape=rightAxleContainerShape;
            // ************************ MERGING ALL TOGETHER ************************ //
            car=PhysiVals.universe.CreateBody(carBodyDef);
            car.CreateFixture(carFixture);
			_sprite = new Car_mc();
			_sprite.x = car.GetPosition().x;
			_sprite.y = car.GetPosition().y;
			addChild(_sprite);
            car.CreateFixture(leftAxleContainerFixture);
            car.CreateFixture(rightAxleContainerFixture);
            // ************************ THE AXLES ************************ //
            var leftAxleShape:b2PolygonShape = new b2PolygonShape();
            leftAxleShape.SetAsOrientedBox(axleContainerWidth/PhysiVals.RATIO/2,axleContainerHeight/PhysiVals.RATIO,new b2Vec2(0,0),axleAngle*degreesToRadians);
            var leftAxleFixture:b2FixtureDef = new b2FixtureDef();
            leftAxleFixture.density=3;
            leftAxleFixture.friction=5;
            leftAxleFixture.restitution=0;
            leftAxleFixture.shape=leftAxleShape;
            leftAxleFixture.filter.groupIndex=-1;
            var leftAxleBodyDef:b2BodyDef = new b2BodyDef();
            leftAxleBodyDef.type=b2Body.b2_dynamicBody;
            var leftAxle:b2Body=PhysiVals.universe.CreateBody(leftAxleBodyDef);
            leftAxle.CreateFixture(leftAxleFixture);
            leftAxle.SetPosition(new b2Vec2(carPosX/PhysiVals.RATIO-axleContainerDistance/PhysiVals.RATIO-axleContainerHeight/PhysiVals.RATIO*Math.cos((90-axleAngle)*degreesToRadians),carPosY/PhysiVals.RATIO+axleContainerDepth/PhysiVals.RATIO+axleContainerHeight/PhysiVals.RATIO*Math.sin((90-axleAngle)*degreesToRadians)));
            var rightAxleShape:b2PolygonShape = new b2PolygonShape();
            rightAxleShape.SetAsOrientedBox(axleContainerWidth/PhysiVals.RATIO/2,axleContainerHeight/PhysiVals.RATIO,new b2Vec2(0,0),-axleAngle*degreesToRadians);
            var rightAxleFixture:b2FixtureDef = new b2FixtureDef();
            rightAxleFixture.density=3;
            rightAxleFixture.friction=5;
            rightAxleFixture.restitution=0;
            rightAxleFixture.shape=rightAxleShape;
            rightAxleFixture.filter.groupIndex=-1;
            var rightAxleBodyDef:b2BodyDef = new b2BodyDef();
            rightAxleBodyDef.type=b2Body.b2_dynamicBody;
            var rightAxle:b2Body=PhysiVals.universe.CreateBody(rightAxleBodyDef);
            rightAxle.CreateFixture(rightAxleFixture);
            rightAxle.SetPosition(new b2Vec2(carPosX/PhysiVals.RATIO+axleContainerDistance/PhysiVals.RATIO+axleContainerHeight/PhysiVals.RATIO*Math.cos((90-axleAngle)*degreesToRadians),carPosY/PhysiVals.RATIO+axleContainerDepth/PhysiVals.RATIO+axleContainerHeight/PhysiVals.RATIO*Math.sin((90-axleAngle)*degreesToRadians)));
            // ************************ THE WHEELS ************************ //;
            var wheelShape:b2CircleShape=new 
            b2CircleShape(wheelRadius/PhysiVals.RATIO);
            var wheelFixture:b2FixtureDef = new b2FixtureDef();
            wheelFixture.density=3;
            wheelFixture.friction=5;
            wheelFixture.restitution=0.2;
            wheelFixture.filter.groupIndex=-1;
            wheelFixture.shape=wheelShape;
            var wheelBodyDef:b2BodyDef = new b2BodyDef();
            wheelBodyDef.type=b2Body.b2_dynamicBody;
            wheelBodyDef.position.Set(carPosX/PhysiVals.RATIO-axleContainerDistance/PhysiVals.RATIO-2*axleContainerHeight/PhysiVals.RATIO*Math.cos((90-axleAngle)*degreesToRadians),carPosY/PhysiVals.RATIO+axleContainerDepth/PhysiVals.RATIO+2*axleContainerHeight/PhysiVals.RATIO*Math.sin((90-axleAngle)*degreesToRadians));
            var leftWheel:b2Body=PhysiVals.universe.CreateBody(wheelBodyDef);
            leftWheel.CreateFixture(wheelFixture);
            wheelBodyDef.position.Set(carPosX/PhysiVals.RATIO+axleContainerDistance/PhysiVals.RATIO+2*axleContainerHeight/PhysiVals.RATIO*Math.cos((90-axleAngle)*degreesToRadians),carPosY/PhysiVals.RATIO+axleContainerDepth/PhysiVals.RATIO+2*axleContainerHeight/PhysiVals.RATIO*Math.sin((90-axleAngle)*degreesToRadians));
            var rightWheel:b2Body=PhysiVals.universe.CreateBody(wheelBodyDef);
            rightWheel.CreateFixture(wheelFixture);
            // ************************ REVOLUTE JOINTS ************************ //
            var leftWheelRevoluteJointDef:b2RevoluteJointDef=new b2RevoluteJointDef();
            leftWheelRevoluteJointDef.Initialize(leftWheel,leftAxle,leftWheel.GetWorldCenter());
            leftWheelRevoluteJointDef.enableMotor=true;
            leftWheelRevoluteJoint=PhysiVals.universe.CreateJoint(leftWheelRevoluteJointDef) as b2RevoluteJoint;
            leftWheelRevoluteJoint.SetMaxMotorTorque(10);
            var rightWheelRevoluteJointDef:b2RevoluteJointDef=new b2RevoluteJointDef();
            rightWheelRevoluteJointDef.Initialize(rightWheel,rightAxle,rightWheel.GetWorldCenter());
            rightWheelRevoluteJointDef.enableMotor=true;
            rightWheelRevoluteJoint=PhysiVals.universe.CreateJoint(rightWheelRevoluteJointDef) as b2RevoluteJoint;
            rightWheelRevoluteJoint.SetMaxMotorTorque(10);
            // ************************ PRISMATIC JOINTS ************************ //
            var leftAxlePrismaticJointDef:b2PrismaticJointDef=new b2PrismaticJointDef();
            leftAxlePrismaticJointDef.lowerTranslation=0;
            leftAxlePrismaticJointDef.upperTranslation=axleContainerDepth/PhysiVals.RATIO;
            leftAxlePrismaticJointDef.enableLimit=true;
            leftAxlePrismaticJointDef.enableMotor=true;
            leftAxlePrismaticJointDef.Initialize(car,leftAxle,leftAxle.GetWorldCenter(), new b2Vec2(-Math.cos((90-axleAngle)*degreesToRadians),Math.sin((90-axleAngle)*degreesToRadians)));
            leftAxlePrismaticJoint=PhysiVals.universe.CreateJoint(leftAxlePrismaticJointDef) as b2PrismaticJoint;
            leftAxlePrismaticJoint.SetMaxMotorForce(30);                         
            leftAxlePrismaticJoint.SetMotorSpeed(10);                                     
            var rightAxlePrismaticJointDef:b2PrismaticJointDef=new b2PrismaticJointDef();
            rightAxlePrismaticJointDef.lowerTranslation=0;
            rightAxlePrismaticJointDef.upperTranslation=axleContainerDepth/PhysiVals.RATIO;
            rightAxlePrismaticJointDef.enableLimit=true;
            rightAxlePrismaticJointDef.enableMotor=true;
            rightAxlePrismaticJointDef.Initialize(car,rightAxle,rightAxle.GetWorldCenter(), new b2Vec2(Math.cos((90-axleAngle)*degreesToRadians),Math.sin((90-axleAngle)*degreesToRadians)));
            rightAxlePrismaticJoint=PhysiVals.universe.CreateJoint(rightAxlePrismaticJointDef) as b2PrismaticJoint;
            rightAxlePrismaticJoint.SetMaxMotorForce(20);                         
            rightAxlePrismaticJoint.SetMotorSpeed(10);      
            //addEventListener(Event.ENTER_FRAME,updateWorld);
            //stage.addEventListener(KeyboardEvent.KEY_DOWN,keyPressed);
            //stage.addEventListener(KeyboardEvent.KEY_UP,keyReleased);
 
        }
		private function keyPressed(e:KeyboardEvent):void {
            switch (e.keyCode) {
                case 37 :
                    left=true;
                    break;
                case 39 :
                    right=true;
                    break;
            }
        }
        private function keyReleased(e:KeyboardEvent):void {
            switch (e.keyCode) {
                case 37 :
                    left=false;
                    break;
                case 39 :
                    right=false;
                    break;
            }
        }
 
		public function updateMyLook():void 
		{
			_sprite.x = car.GetPosition().x * PhysiVals.RATIO;
			_sprite.y = car.GetPosition().y * PhysiVals.RATIO;
			_sprite.rotation = car.GetAngle() * 180 / Math.PI;
		}
    }
}


Подскажите как добиться нормальных результатов?
Вложения
Тип файла: rar DriveMe.rar (105.4 Кб, 16 просмотров)

Старый 23.08.2013, 09:43
Alteleid вне форума Посмотреть профиль Отправить личное сообщение для Alteleid Найти все сообщения от Alteleid
  № 2  
Ответить с цитированием
Alteleid

Регистрация: Aug 2013
Сообщений: 2
Кто ни будь работал с этим? Может что ни будь подсказать?

Создать новую тему Ответ Часовой пояс GMT +4, время: 15:38.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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