Отладчик Box2D не работает со Starling

Я использую Box2D с последней версией Starling, я пытаюсь использовать отладчик Box2D, но пока ничего не работает, это то, что я пробовал, я добавил слой Flash поверх слоя stage3D, поэтому я иметь возможность использовать Flash Sprite, я запускаю свое приложение в Интернете.

Основной класс:

    public function BallFriction()
    {
        this.addEventListener(Event.ADDED_TO_STAGE, onReady, false, 0, true);
    }

    private function onReady(event : Event) : void
    {
        this.removeEventListener(Event.ADDED_TO_STAGE, onReady);


        var stats:Stats = new Stats();
        stats.y = 500;
        stats.x = 50;
        this.addChild(stats);

        stage.color = 0x333333;
        stage.stage3Ds[0].addEventListener(Event.CONTEXT3D_CREATE, onContextCreated);

        oStarling = new Starling(Game, stage);
        //          akaStarling = new Starling(BoxWorld, stage);
        oStarling.antiAliasing = 1;
        oStarling.start();


    }

    private function onContextCreated(e:Event):void{
        //debug mode
        debugSprite=new Sprite();
        addChild(debugSprite);

        (BallFriction.oStarling.stage.getChildAt(0) as Game).debugDraw(BallFriction.debugSprite);
    }

Игровой мир:

  public function Game() 
    {
        super();

        // Create a b2World with gravity 9.8 towards y axis. 
        world = new b2World(new b2Vec2(0, 9.8), true);

        floor(400,590,800,20);
        theBall = ball(100,400,ballWidth/2,Texture.fromBitmap(new Ball()));
        // I also set the velocity of the ball
        theBall.SetLinearVelocity(new b2Vec2(8, -8));

        // Listen enterframe event and update world for each enter frame
        this.addEventListener(EnterFrameEvent.ENTER_FRAME, updateWorld);
        this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
    }

    private function onAddedToStage():void
    {
        this.removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);

        //(BallFriction.oStarling.stage.getChildAt(0) as Game).debugDraw(BallFriction.debugSprite);

    }

 private function updateWorld(e:EnterFrameEvent):void
    {
        world.Step(timestep, 10, 10);
        world.DrawDebugData()
        world.ClearForces();
    }

    public function debugDraw(debugSprite:flash.display.Sprite):void{
        var debugDraw:b2DebugDraw = new b2DebugDraw();
        debugDraw.SetSprite(Starling.current.nativeOverlay);
        debugDraw.SetDrawScale(30);
        debugDraw.SetLineThickness( 1.0);
        debugDraw.SetAlpha(1);
        debugDraw.SetFillAlpha(0.4);
        debugDraw.SetFlags(b2DebugDraw.e_shapeBit);
        world.SetDebugDraw(debugDraw);
    }

person Zouhair Elamrani Abou Elassad    schedule 27.01.2015    source источник
comment
Слишком сложно устранять неполадки только на сайте   -  person Code Whisperer    schedule 28.01.2015


Ответы (2)


Не похоже, что вы добавили какие-либо флаги в свою логику отладки отрисовки, используя b2DebugDraw.AppendFlag() или b2DebugDraw.SetFlags(); флаги сообщают отладочному рисованию, какую информацию ему нужно отобразить на экране. Скорее всего, вы захотите использовать флаг b2DebugDraw.e_shapeBit.

Также не похоже, что вы определили масштаб прорисовки с помощью b2Debug.SetDrawScale(), хотя я не уверен, не имея возможности проверить это прямо сейчас, является ли это абсолютно необходимым.

Проверяю класс Debug в моем вам может помочь игровая среда - она ​​решает именно эту проблему.

person Marty    schedule 27.01.2015
comment
.. Я отредактировал функцию отладки (отредактировал свой пост), и она сработала, странно то, что я уже пробовал это решение раньше, и ничего не произошло, поэтому мне пришлось использовать более простое решение, я не знаю, что изменилось, кроме как повернуть мой компьютер выключен ночью, спасибо, также, если у вас есть какие-либо другие примеры со Starling и Box2D, это было бы здорово, я не могу найти многого там :). - person Zouhair Elamrani Abou Elassad; 28.01.2015

Вы должны звонить world.DrawDebugData() каждый раз, когда звоните step()

person Code Whisperer    schedule 27.01.2015
comment
.. Я отредактировал свой вопрос и добавил метод обновления, даже при использовании world.DrawDebugData() ничего не появляется. - person Zouhair Elamrani Abou Elassad; 28.01.2015