介绍规则body怎样和图片结合。上一篇文章我介绍了box2D的基本知识,假设你用心的话。你会搜索网上相关简单demo吧。那些我就不写了。那么假设我用图片表示我的那个body。而不是简单线条。那该怎么办?
以下,我以我的项目中小球对象生成为例,介绍精灵和body怎样结合:
以下是创建一个小球类,重要的都凝视了:
public class Ball { private static final float BALL_RADIUS = 0.15f;// 球半径 private final Random rand = new Random(); public Body ballModels; //小球body public Sprite ballSprite;//精灵 public int type; //小球的类型 public Ball(World world,int type) { BodyDef ballBodyDef = new BodyDef(); //生成一个def ballBodyDef.type = BodyType.DynamicBody; //定义成小球是不受控制的动态物体 CircleShape shape = new CircleShape(); //定义小球的形状 shape.setRadius(BALL_RADIUS); FixtureDef fd = new FixtureDef(); //生成一个Fixture fd.density = 1; //密度 fd.friction = 0f; //摩擦力 fd.restitution = 0.5f; //弹力 fd.shape = shape; ballModels = GameScreen.world.createBody(ballBodyDef); //为body载入def ballModels.createFixture(fd);//为body创建fixture shape.dispose(); reset( type); } public void reset(int type){ this.type=type; float tx = rand.nextFloat() * 1.0f - 0.4f; float ty = GameScreen.camera.position.y + GameScreen.camera.viewportHeight/2 + BALL_RADIUS; float angle = rand.nextFloat() * MathUtils.PI * 2; Vector2 vec = new Vector2(); ballModels.setActive(true); ballModels.setAwake(true); ballModels.setLinearVelocity(vec.set(0, 0)); ballModels.setAngularVelocity(0); ballModels.setTransform(vec.set(0.3f, 10), angle); //小球创建的初始位置 ballSprite = new Sprite(GameCenter.balls[type]); //生成一个精灵 ballSprite.setSize(BALL_RADIUS*2, BALL_RADIUS*2); ballSprite.setOrigin(BALL_RADIUS, BALL_RADIUS); } }
那么我们能够通过 在游戏界面中调用Ball ball=new Ball(world,0)产生小球。可是你会发现当你写好以后并不会产生小球,为什么呢?不是它没产生,而是由于它是不可见的,所以我们要给他披上一件“外衣”让我们能够看到它,也就是绘制精灵,并让精灵和小球这个body同步。这样不就能够了嘛!
这里,我写了一个函数用来同步body和精灵,当我们把这个函数放到Render中不停地刷新:
public ArrayList<Ball> balls = new ArrayList<Ball>(); public ArrayList<Sprite> ballSprites = new ArrayList<Sprite>();
public void ballsRender() { for (int i = 0; i < balls.size(); i++) { Vector2 ballPos = balls.get(i).ballModels.getPosition(); <span style="color:#33ff33;">//首先获得body位置</span> ballSprites.get(i).setPosition( ballPos.x - ballSprites.get(i).getWidth() / 2, ballPos.y - ballSprites.get(i).getHeight() / 2); <span style="color:#33cc00;">//这里更新精灵位置</span> ballSprites.get(i).setRotation( balls.get(i).ballModels.getAngle() * MathUtils.radiansToDegrees); <span style="color:#33cc00;">//旋转角度</span> ballSprites.get(i).draw(batch); <span style="color:#33cc00;"> //绘制精灵</span> } }
我想看到这你能够自己去尝试的写写试试吧,不是必需整我这麽多參数,看看能不能实现。
假设有什么问题,能够在下方留言。我会非常快答复的!
好,上面是一个简单的实现的规则图案的,眼下box2D支持形状没有特别更,只是一些简单的常用。你可以把那些在线去官demo小心翼翼的学习。所以,问题是,假设你遇到一个不规则图案,因此,我们将如何body和精灵结合起来?答案将公布下一个博客我。
时间: 2024-11-03 21:20:46