热点新闻
固定的Box2D对象
2023-07-17 10:38  浏览:3346  搜索引擎搜索“养老之家”
温馨提示:信息一旦丢失不一定找得到,请务必收藏信息以备急用!本站所有信息均是注册会员发布如遇到侵权请联系文章中的联系方式或客服删除!
联系我时,请说明是在养老之家看到的信息,谢谢。
展会发布 展会网站大全 报名观展合作 软文发布

书名:代码本色:用编程模拟自然系统
作者:Daniel Shiffman
译者:周晗彬
ISBN:978-7-115-36947-5
目录

5.8 固定的Box2D对象

  在上面的例子中,盒子对象首先出现在鼠标所在的位置,之后随着Box2D中默认的重力作用下落。假如我们想在Box2D中放置一些固定的边界,这些边界能够阻挡盒子物体运动路径(如下图所示),该怎么实现?

1、锁定

  在Box2D中,我们可以简单地将物体(包括所有已连接的形状)锁定在某个位置。只要把BodyDef对象的type属性设为STATIC。

BodyDef bd = new BodyDef(); bd.type = BodyType.STATIC; 定义的type属性一旦被设为STATIC,物体就被锁定在某个位置

  我们可以在上面的盒子示例程序中加入这个特性,只需要添加一个Boundary类,并且为每个边界分别创建Box2D物体。

2、示例

  示例代码5-2 带有撞击边界的盒子下落模拟

// A fixed boundary class class Boundary { // A boundary is a simple rectangle with x,y,width,and height float x; float y; float w; float h; // But we also have to make a body for box2d to know about it Body b; Boundary(float x_,float y_, float w_, float h_) { x = x_; y = y_; w = w_; h = h_; // Define the polygon PolygonShape ps = new PolygonShape(); // Figure out the box2d coordinates float box2dW = box2d.scalarPixelsToWorld(w/2); float box2dH = box2d.scalarPixelsToWorld(h/2); // We're just a box ps.setAsBox(box2dW, box2dH); // Create the body BodyDef bd = new BodyDef(); bd.type = BodyType.STATIC; bd.position.set(box2d.coordPixelsToWorld(x,y)); b = box2d.createBody(bd); // Attached the shape to the body using a Fixture b.createFixture(ps,1); } // Draw the boundary, if it were at an angle we'd have to do something fancier void display() { fill(0); stroke(0); rectMode(CENTER); rect(x,y,w,h); } }

3、运行结果






发布人:119f****    IP:117.173.23.***     举报/删稿
展会推荐
让朕来说2句
评论
收藏
点赞
转发