博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Libgdx Box2D真实---这缓释微丸(三:规则经常使用body和精灵联合)
阅读量:6181 次
发布时间:2019-06-21

本文共 2684 字,大约阅读时间需要 8 分钟。

介绍规则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
balls = new ArrayList
();public ArrayList
ballSprites = new ArrayList
();
public void ballsRender() {		for (int i = 0; i < balls.size(); i++) {			Vector2 ballPos = balls.get(i).ballModels.getPosition();  //首先获得body位置			ballSprites.get(i).setPosition(					ballPos.x - ballSprites.get(i).getWidth() / 2,					ballPos.y - ballSprites.get(i).getHeight() / 2); //这里更新精灵位置			ballSprites.get(i).setRotation(					balls.get(i).ballModels.getAngle()					* MathUtils.radiansToDegrees);                   //旋转角度			ballSprites.get(i).draw(batch);                          //绘制精灵		}}

我想看到这你能够自己去尝试的写写试试吧,不是必需整我这麽多參数,看看能不能实现。

假设有什么问题,能够在下方留言。我会非常快答复的!

好,上面是一个简单的实现的规则图案的,眼下box2D支持形状没有特别更,只是一些简单的常用。你可以把那些在线去官demo小心翼翼的学习。所以,问题是,假设你遇到一个不规则图案,因此,我们将如何body和精灵结合起来?答案将公布下一个博客我。

转载地址:http://yebda.baihongyu.com/

你可能感兴趣的文章
connector for python
查看>>
等价类划分的应用
查看>>
Web Service(下)
查看>>
trigger()
查看>>
nvm 怎么安装 ?
查看>>
Java VM里的magic
查看>>
[Node.js]Domain模块
查看>>
Linux操作系统文档
查看>>
利用Tensorflow训练自定义数据
查看>>
c++官方文档-枚举-联合体-结构体-typedef-using
查看>>
[题解]UVA11029 Leading and Trailing
查看>>
利用vue-gird-layout 制作可定制桌面 (一)
查看>>
校园社交网站app
查看>>
如何指定某些文件关闭ARC
查看>>
4、跃进表
查看>>
JAVA面向对象的总结(静态函数与static关键字)
查看>>
课堂作业第四周课上作业一
查看>>
使用Java语言开发微信公众平台(七)——音乐消息的回复
查看>>
陶哲轩实分析习题9.1.6
查看>>
常用音频软件:Cool edit pro
查看>>