Box2D教程3-刚体绑定外观
生活随笔
收集整理的這篇文章主要介紹了
Box2D教程3-刚体绑定外观
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Box2D教程1-創建碰撞世界
Box2D教程2-鼠標交互
Box2D教程3-剛體綁定外觀
Box2D教程4-復雜剛體的復雜外觀
Box2D教程5-碰撞檢測
通常我們制作游戲時不可能使用Box2D提供的默認調試顯示對象,我們需要創建個性化的外觀,如果汽車、房子等等。那么如何把這些外觀附加到剛體上面呢?這就是此教程的重點。
創建一個剛體外觀,我們兩步:
1. 將外觀顯示對象附加到剛體的剛體定義的userData屬性
2. 將userData的x, y, rotation與剛體實現同步
在上一個教程的基礎上,修改createBall()方法,添加顯示對象Ball(自定義顯示對象)
private function createBall():void{
for(var i:int = 0; i < 10; i++)
{
var ballDef:b2BodyDef = new b2BodyDef();
ballDef.type = b2Body.b2_dynamicBody;
var radius:Number = 10+Math.random()*20;
var circleShape:b2CircleShape = new b2CircleShape(radius/PIXEL_TO_METER);
var ballFixtureDef:b2FixtureDef = new b2FixtureDef();
ballFixtureDef.shape = circleShape;
ballFixtureDef.density = 1.0;
ballFixtureDef.restitution = 1.0;
ballFixtureDef.friction = 0.5;
ballDef.position.Set(stage.stageWidth/2/PIXEL_TO_METER,20/PIXEL_TO_METER);
//為每一個球創建一個相同大小的顯示對象外觀
var ballSprite:Ball = new Ball(radius,i+"");
//將顯示對象存入剛體定義的userData樹形
ballDef.userData = ballSprite;
//添加到容器中
addChild(ballSprite);
var ball:b2Body = world.CreateBody(ballDef);
ball.CreateFixture(ballFixtureDef);
}
}
實現顯示外觀與剛體的同步
private function aysncSprite():void{
//遍歷物理世界的所有剛體,此處為何如此遍歷請參考Manual
//如果你已經給外觀指定了變量,就不用遍歷,直接調用變量
var body:b2Body = world.GetBodyList();
while(body!=null)
{
if(body.GetDefinition().userData is Sprite)
{
var ballSprite:Sprite = body.GetDefinition().userData as Sprite;
ballSprite.x = body.GetPosition().x * PIXEL_TO_METER;
ballSprite.y = body.GetPosition().y * PIXEL_TO_METER;
ballSprite.rotation = body.GetAngle() * (180 / Math.PI);
}
body = body.GetNext();
}
}
在handleEnterframe方法中實現同步,并取消Box2D的debug繪制。
private function handleEnterFrame(evt:Event):void{
//更新鼠標位置
UpdateMouseWorld();
//不斷調用鼠標拖動方法
mouseDrag();
var timeStep:Number = 1/30;
var velocityInterations:int = 10;
var positionIterations:int = 10;
world.Step(timeStep,velocityInterations,positionIterations);
//同步顯示對象和剛體
aysncSprite();
//在2.1版本清除力,以提高效率
world.ClearForces();
//繪制
// world.DrawDebugData();
}
下載源碼
轉載于:https://www.cnblogs.com/jinglehit/archive/2012/01/05/2313174.html
總結
以上是生活随笔為你收集整理的Box2D教程3-刚体绑定外观的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 持续集成框架,自动部署服务搭建jenki
- 下一篇: vscode主题 webstorm_从