Flash Box2D не обнаруживает столкновения? - PullRequest
0 голосов
/ 22 июля 2011

РЕДАКТИРОВАТЬ: я понял, что было не так, и это больше не вопрос. Решением была глупая ошибка, и я случайно установил итерации на 0. Извините!

Я только изучаю Box2D и выполняю симуляцию "hello world", но у меня возникла проблема.

У меня падает объект ящика, и он должен упасть на землю и сгладиться / подпрыгнуть, однако ящик полностью игнорирует тело пола и продолжает.

Я рендерил все, используя debugDraw, и не изменил исходный код. Я использую версию 2.0.2.

.swf можно найти здесь .

Мой класс Main.as выглядит следующим образом:

// Main.as
//
//
/*
/ TODO:
/ 
/ *Collision not working
/ 
/ *Correct todo list size
/
/ *Fill empty area of todo list with useless items
/
/ *Stop writing comments at 2AM.
/
*/

package  
{
    import flash.display.*
    import flash.events.*
    import flash.display.MovieClip;
    import Box2D.Collision.*
    import Box2D.Collision.Shapes.*
    import Box2D.Common.*
    import Box2D.Common.Math.*
    import Box2D.Dynamics.*

    public class Main extends MovieClip 
    {
        public static const RATIO:int = 30
        private var world:b2World
        private var crate:b2Body
        private var timeStep:Number = 1/60
        private var iterations:int = 0

        public function Main() 
        {
            createWorld()
            createShapes()
            addCrate()
            startDebug()

            stage.addEventListener(Event.ENTER_FRAME, loop)
        }

        private function startDebug()
        {
            var drawing:Sprite = new Sprite()
            addChild(drawing)

            var drawer:b2DebugDraw = new b2DebugDraw()
            drawer.m_sprite = drawing
            drawer.m_drawScale = RATIO
            drawer.SetFlags(b2DebugDraw.e_shapeBit)
            drawer.m_lineThickness = 2
            drawer.m_fillAlpha = .8

            world.SetDebugDraw(drawer)
        }

        private function loop(e:Event)
        {
            world.Step(timeStep, iterations)

            //tracing

            trace('X: ' + crate.GetPosition().x * RATIO + '; Y: ' + crate.GetPosition().y * RATIO)
        }

        private function addCrate()
        {
            //Add falling block and shit, IDK.
            // Coords should be 230, 15.

            var crateDef:b2BodyDef = new b2BodyDef()
            crateDef.position.Set(230 / RATIO, -40 / RATIO)
            crateDef.angle = 30

            var crateShapeDef:b2PolygonDef = new b2PolygonDef()
            crateShapeDef.SetAsBox(25 / RATIO ,25 / RATIO)
            crateShapeDef.density = .7
            crateShapeDef.friction = .4
            crateShapeDef.restitution = .6

            crate = world.CreateBody(crateDef)
            crate.CreateShape(crateShapeDef)
            crate.SetMassFromShapes()

            trace('Crate added, biatch.')

            stage.addEventListener(Event.ENTER_FRAME, loop)
        }

        private function createWorld()
        {
            var universeAABB:b2AABB = new b2AABB()
            universeAABB.lowerBound.Set(-3000 / RATIO,-3000 / RATIO)
            universeAABB.upperBound.Set(3000 / RATIO,3000 / RATIO)

            var gravity:b2Vec2 = new b2Vec2(0, 15)
            var ignoreSleep:Boolean = true

            world = new b2World(universeAABB, gravity, ignoreSleep)
            trace('World created, ' + world.GetBodyCount() + ' bodies contained within.')
        }

        private function createShapes()
        {
            var floorRectDef:b2PolygonDef = new b2PolygonDef()
            floorRectDef.SetAsBox(275 / RATIO, 5 / RATIO)
            floorRectDef.friction = 0.4
            floorRectDef.restitution = 0.4
            floorRectDef.density = 0


            var floorBodyDef:b2BodyDef = new b2BodyDef()
            floorBodyDef.position.Set(275 / RATIO, 395 / RATIO)

            var floorBody:b2Body = world.CreateBody(floorBodyDef)
            floorBody.CreateShape(floorRectDef)
            floorBody.SetMassFromShapes()

            var wallShapeDef:b2PolygonDef = new b2PolygonDef()
            wallShapeDef.SetAsBox(5 / RATIO, 195 / RATIO)
            wallShapeDef.friction = 0.4
            wallShapeDef.restitution = 0.4
            wallShapeDef.density = 0

            var wallBodyDef:b2BodyDef = new b2BodyDef()
            wallBodyDef.position.Set(5 / RATIO, 195 / RATIO)

            var leftWall:b2Body = world.CreateBody(wallBodyDef)
            leftWall.CreateShape(wallShapeDef)

            wallBodyDef.position.Set(545 / RATIO, 195 / RATIO)

            var rightWall:b2Body = world.CreateBody(wallBodyDef)
            rightWall.CreateShape(wallShapeDef)

            trace('Walls created, simulation now has ' + world.GetBodyCount() + ' bodies.')
        }
    }

}

Заранее спасибо за вашу помощь, вы никогда не подводили меня, когда я застрял в проблеме.

1 Ответ

0 голосов
/ 22 июля 2011

Итерации были установлены на 0, я установил на 10, и он работает.Сумасшедший на мне.

...