2012-07-13 3 views
1

Box2D에 다음 코드가 있습니다. 마우스를 클릭하는 지점까지 동적 본문을 이동하고 싶습니다. 또한 앞으로는 역동적 인 몸체를 제거 할 수 있기를 바라고 world.DeleteBody (...)와 같은 것을 찾을 수 없습니다. 도와주세요.Box2DWeb - 세계에서 몸 추가 및 제거

var world; 
var b2Vec2 = Box2D.Common.Math.b2Vec2 
     , b2BodyDef = Box2D.Dynamics.b2BodyDef 
     , b2Body = Box2D.Dynamics.b2Body 
     , b2FixtureDef = Box2D.Dynamics.b2FixtureDef 
     , b2Fixture = Box2D.Dynamics.b2Fixture 
     , b2World = Box2D.Dynamics.b2World 
     , b2MassData = Box2D.Collision.Shapes.b2MassData 
     , b2PolygonShape = Box2D.Collision.Shapes.b2PolygonShape 
     , b2CircleShape = Box2D.Collision.Shapes.b2CircleShape 
     , b2DebugDraw = Box2D.Dynamics.b2DebugDraw 
     ; 
var canvas = document.getElementById("canvas"); 
var context = canvas.getContext("2d"); 

var mouseX, mouseY, isMouseDown; 
var bBallBody, bBallbodyDef; 

function init() { 
    world = new b2World(
      new b2Vec2(0, 10) //gravity 
     , true     //allow sleep 
    ); 
    setupWorld() ; 
    //setup debug draw 
    var debugDraw = new b2DebugDraw(); 
     debugDraw.SetSprite(document.getElementById("canvas").getContext("2d")); 
     debugDraw.SetDrawScale(1.0); 
     debugDraw.SetFillAlpha(0.3); 
     debugDraw.SetLineThickness(1.0); 
     debugDraw.SetFlags(b2DebugDraw.e_shapeBit | b2DebugDraw.e_jointBit); 

    world.SetDebugDraw(debugDraw); 
    window.setInterval(update, 1000/60); 
    }; 

    function setupWorld() { 
     setupGround(); 
     addBouncingBall(); 
    } 

    function setupGround() { 
    var fixDef = new b2FixtureDef; 
    fixDef.density = 1.0; 
    fixDef.friction = 0.5; 
    fixDef.restitution = 0.2; 
    var bodyDef = new b2BodyDef; 
    //create ground 
    bodyDef.type = b2Body.b2_staticBody; 
    bodyDef.position.x = 300; 
    bodyDef.position.y = 400; 
    fixDef.shape = new b2PolygonShape; 
    fixDef.shape.SetAsBox(290, 10); 
    world.CreateBody(bodyDef).CreateFixture(fixDef); 
    } 

    function addBouncingBall() { 
    var fixDef = new b2FixtureDef; 
    fixDef.density = 1.0; 
    fixDef.friction = 1.0; 
    fixDef.restitution = 0.1; 
    var bBallbodyDef = new b2BodyDef; 
    bBallbodyDef.type = b2Body.b2_dynamicBody; 
    fixDef.shape = new b2CircleShape(Math.random() + 30); 
    bBallbodyDef.position.x = Math.random() * 300; 
    bBallbodyDef.position.y = Math.random() * 300; 
    bBallBody = world.CreateBody(bBallbodyDef).CreateFixture(fixDef); 
    console.log(bBallBody.m_body.GetPosition().x); 

    }; 

    document.addEventListener("mousedown", handleMouseMove, true); 

    function handleMouseMove(e) { 
     isMouseDown = true; 
     mouseX = e.clientX; 
     mouseY = e.clientY; 
    }; 

    function update() { 

    if(isMouseDown) 
     { 
      for (b = world.GetBodyList() ; b; b = b.GetNext()) { 
       if (b.GetType() == b2Body.b2_dynamicBody) { 
        console.log(b.x, b.y); 
        b.x = 100; 
        b.y = 100; 
        } 
        } 
     isMouseDown = false; 
     } 
     world.Step(1/60, 10, 10); 
     world.DrawDebugData(); 
     world.ClearForces(); 
    }; 

업데이트 : 다음과 같이 세계에서 개체의

삭제는

  1. 이 개체의 삭제를 Schdule하는 타이머를 생성, 수행됩니다.

    window.setInterval(removeObjScheduledForRemoval, 1000/90); 
    
  2. 삭제할 개체를 배열로 수집하십시오.

    var bricksScheduledForRemoval = Array(); 
        var index = -1; 
        function removeObjScheduledForRemoval() 
        { 
        for(var i = 0; i <= index; i++){ 
        world.DestroyBody(bricksScheduledForRemoval[i]);  
        bricksScheduledForRemoval[i] = null;  
         } 
    bricksScheduledForRemoval = Array(); 
        index = -1; 
        } 
    

는 전체 코드는 http://box2dinabox.blogspot.in/2012/07/the-completed-bananamonkey-game.html

+0

안녕하세요, 감사합니다. Box2DWeb은 문서가 심각하게 부족합니다. 내 머리가 부러졌습니다. 기본 워크 플로를 파악하고 http://box2dinabox.blogspot.in/에서 블로그를 작성했습니다. 희망 누군가는 그것을 유용하게 찾을 것입니다 :) – sri

답변

0

원래 C 버전, 그래서 검색 고려할 때 box2dweb에 대한 문서는 포괄적 근처에 아무데도 여기 있습니다 "Box2D의"대신 "box2dweb". 또한 source을 조사하고 특정 방법의 철자를 찾는 것이 도움이 될 수 있습니다. 또는 box2d 플래시 설명서를 살펴보십시오. 기본적으로 box2dweb의 메서드는 DestroyJointDestroyBody입니다.

더 고려 사항이 도움이 될 수 : http://www.iforce2d.net/b2dtut/removing-bodies

+0

안녕하세요, Box2DWeb 심각하게 설명서가 부족, 그것 위에 내 머리를 부러 뜨 렸어. 기본 워크 플로를 파악하고 http://box2dinabox.blogspot.in/에서 블로그를 작성했습니다. 희망 누군가 유용 할 것입니다 :) – sri

-2

당신은 몸을 제거하거나이 게임의 예처럼 동적 정적 몸을 변경할 수 있습니다. http://pixsansar.com/box2dweb-jumping-and-puzzle-ball-level4

Box2dweb에는 removebody 또는 changeBodyType 옵션이 있으며, 소스 코드를 참조하십시오.

+0

위의 링크 된 페이지는 다음과 같은 오류를 던집니다 : "GET http://return.uk.domainnamesales.com/return_js.php?d=pixsansar.com&s=1393187553 net :: ERR_BLOCKED_BY_CLIENT'' – droidballoon