簡體   English   中英

Flash Box2D 沒有檢測到碰撞?

[英]Flash Box2D not detecting collisions?

編輯:我知道出了什么問題,這不再是一個問題。 解決方案是一個愚蠢的錯誤,我不小心將迭代次數設置為 0。對不起!

我只是在學習 Box2D,並且正在做一個“hello world”式的模擬,但是遇到了問題。

我有一個板條箱 object 掉落,它應該會撞到地面並變平/彈跳,但是,板條箱完全忽略了地板主體並繼續。

我正在使用 debugDraw 渲染所有內容,並且沒有更改源代碼。 我使用的是 2.0.2 版。

.swf 可以在這里找到。

我的 Main.as class 如下:

// 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.')
        }
    }

}

在此先感謝您的所有幫助,當我遇到問題時,你們從來沒有讓我失望過。

Iterations 設置為 0,我將其設置為 10,它可以工作。 對我嗤之以鼻。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM