2013-09-25 3 views
0

Я создаю сцену и коробку внутри своего мобильного приложения, используя скворец + as3.Starling + Box2d - Столкновение неточно

Хорошо, теперь, когда я протестировать приложение ящик падает, но это не соответствует стены, как будто было компенсировано:

https://www.dropbox.com/s/hd4ehnfthh0ucfm/box.png

Вот как я создал коробки (стены и коробка).

Кажется, что есть смещение, которое, как вы думаете?

public function createBox(x:Number, y:Number, width:Number, height:Number, rotation:Number = 0, bodyType:uint = 0):void { 

      /// Vars used to create bodies 
      var body:b2Body; 
      var boxShape:b2PolygonShape; 
      var circleShape:b2CircleShape; 

       var fixtureDef:b2FixtureDef = new b2FixtureDef(); 
      fixtureDef.shape = boxShape; 
      fixtureDef.friction = 0.3; 
      // static bodies require zero density 
      fixtureDef.density = 0; 

      var quad:Quad; 

       bodyDef = new b2BodyDef();    
       bodyDef.type = bodyType; 
       bodyDef.position.x = x/WORLD_SCALE; 
       bodyDef.position.y = y/WORLD_SCALE; 

       // Box 
       boxShape = new b2PolygonShape(); 
       boxShape.SetAsBox(width/WORLD_SCALE, height/WORLD_SCALE); 
       fixtureDef.shape = boxShape; 
       fixtureDef.density = 0; 
       fixtureDef.friction = 0.5; 
       fixtureDef.restitution = 0.2; 

       // create the quads 
       quad = new Quad(width, height, Math.random() * 0xFFFFFF); 

       quad.pivotX = 0; 
       quad.pivotY = 0; 


       // this is the key line, we pass as a userData the starling.display.Quad 
       bodyDef.userData = quad; 

       // 
       body = m_world.CreateBody(bodyDef); 
       body.CreateFixture(fixtureDef); 

       body.SetAngle(rotation * (Math.PI/180)); 

       _clipPhysique.addChild(bodyDef.userData); 

     } 

ответ

0

Метод SetAsBox принимает половину ширины и половину высоты в качестве параметров. Я предполагаю, что ваша графика не соответствует вашим телам box2d. Таким образом, вам нужно будет сделать вашу графику вдвое большей или умножить параметры SetAsBox на 0,5. Также центр тела будет находиться в центре его, поэтому смещайте ваш мувиклип соответственно в зависимости от его положения поворота.

Обратите внимание, что box2d имеет debugrenderer, который может очертить ваши тела, чтобы вы могли видеть, что происходит.

+0

Да, я тоже это заметил, setasbox - это метод позаботиться о – mirzahat

Смежные вопросы