[英]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.