介绍规则body怎样和图片结合。上一篇文章我介绍了box2D的基本知识,假设你用心的话。你会搜索网上相关简单demo吧。那些我就不写了。那么假设我用图片表示我的那个body。而不是简单线条。那该怎么办?

以下,我以我的项目中小球对象生成为例,介绍精灵和body怎样结合:

以下是创建一个小球类,重要的都凝视了:

  1. public class Ball {
  2. private static final float BALL_RADIUS = 0.15f;// 球半径
  3. private final Random rand = new Random();
  4. public Body ballModels; //小球body
  5. public Sprite ballSprite;//精灵
  6. public int type; //小球的类型
  7. public Ball(World world,int type) {
  8.  
  9. BodyDef ballBodyDef = new BodyDef(); //生成一个def
  10. ballBodyDef.type = BodyType.DynamicBody; //定义成小球是不受控制的动态物体
  11. CircleShape shape = new CircleShape(); //定义小球的形状
  12. shape.setRadius(BALL_RADIUS);
  13.  
  14. FixtureDef fd = new FixtureDef(); //生成一个Fixture
  15. fd.density = 1; //密度
  16. fd.friction = 0f; //摩擦力
  17. fd.restitution = 0.5f; //弹力
  18. fd.shape = shape;
  19. ballModels = GameScreen.world.createBody(ballBodyDef); //为body载入def
  20. ballModels.createFixture(fd);//为body创建fixture
  21. shape.dispose();
  22. reset( type);
  23. }
  24.  
  25. public void reset(int type){
  26.  
  27. this.type=type;
  28. float tx = rand.nextFloat() * 1.0f - 0.4f;
  29. float ty = GameScreen.camera.position.y + GameScreen.camera.viewportHeight/2 + BALL_RADIUS;
  30. float angle = rand.nextFloat() * MathUtils.PI * 2;
  31. Vector2 vec = new Vector2();
  32. ballModels.setActive(true);
  33. ballModels.setAwake(true);
  34. ballModels.setLinearVelocity(vec.set(0, 0));
  35. ballModels.setAngularVelocity(0);
  36. ballModels.setTransform(vec.set(0.3f, 10), angle); //小球创建的初始位置
  37. ballSprite = new Sprite(GameCenter.balls[type]); //生成一个精灵
  38. ballSprite.setSize(BALL_RADIUS*2, BALL_RADIUS*2);
  39. ballSprite.setOrigin(BALL_RADIUS, BALL_RADIUS);
  40. }
  41.  
  42. }

那么我们能够通过  在游戏界面中调用Ball ball=new Ball(world,0)产生小球。可是你会发现当你写好以后并不会产生小球,为什么呢?不是它没产生,而是由于它是不可见的,所以我们要给他披上一件“外衣”让我们能够看到它,也就是绘制精灵,并让精灵和小球这个body同步。这样不就能够了嘛!

这里,我写了一个函数用来同步body和精灵,当我们把这个函数放到Render中不停地刷新:

  1. public ArrayList<Ball> balls = new ArrayList<Ball>();
  2. public ArrayList<Sprite> ballSprites = new ArrayList<Sprite>();
  1. public void ballsRender() {
  2. for (int i = 0; i < balls.size(); i++) {
  3. Vector2 ballPos = balls.get(i).ballModels.getPosition(); <span style="color:#33ff33;">//首先获得body位置</span>
  4. ballSprites.get(i).setPosition(
  5. ballPos.x - ballSprites.get(i).getWidth() / 2,
  6. ballPos.y - ballSprites.get(i).getHeight() / 2); <span style="color:#33cc00;">//这里更新精灵位置</span>
  7. ballSprites.get(i).setRotation(
  8. balls.get(i).ballModels.getAngle()
  9. * MathUtils.radiansToDegrees); <span style="color:#33cc00;">//旋转角度</span>
  10. ballSprites.get(i).draw(batch); <span style="color:#33cc00;"> //绘制精灵</span>
  11. }
  12. }

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

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

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

Libgdx Box2D真实---这缓释微丸(三:规则经常使用body和精灵联合)的更多相关文章

  1. Libgdx Box2D现实---这缓释微丸(两:Box2D介绍)

     Box2D官方网站 : http://box2d.org/ Box2D v2.1.0用户手冊翻译 : http://blog.csdn.net/complex_ok/article/catego ...

  2. Libgdx Box2D现实------这缓释微丸(一个:项目介绍)

    它花了两个星期的假写物理游戏,在几次课逃逸,是大学,因为大部分时间点!今天,我基本上一直每节课的点1-3有时它,哎,这似乎是不再逃跑.不知道值没有值得,仅仅是简单地想做自己喜欢的事情,而不是跟老师大眼 ...

  3. Spring Cloud 微服务三: API网关Spring cloud gateway

    前言:前面介绍了一款API网关组件zuul,不过发现spring cloud自己开发了一个新网关gateway,貌似要取代zuul,spring官网上也已经没有zuul的组件了(虽然在仓库中可以更新到 ...

  4. spring cloud微服务三:Eureka服务治理之注册服务提供者及服务的发现和消费

    当服务注册中心成功建立以后,就需要有服务的注册和消费,否则这个服务注册中心就没有了存在的意义,而实际上,一个简单的服务注册也是非常简单的,仅仅需要实现四部曲就好. 首先,还是建立一个基本的spring ...

  5. 15、Cocos2dx 3.0游戏开发找小三之Sprite:每一个精灵都是上辈子折翼的天使

    重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/30475395 Sprite  Sprite 能够说是 ...

  6. 用户IP地址的三个属性的区别(HTTP_X_FORWARDED_FOR,HTTP_VIA,REM_addr

    转自http://www.blogjava.net/Todd/archive/2009/10/09/297590.html 一.没有使用代理服务器的情况: REMOTE_ADDR = 您的 IP    ...

  7. 关于httpservletrequest的获取真实的ip

    via 值为: 下面是一些DemoWTP/1.1 GDSZ-PS-GW010-WAP05.gd.chinamobile.com (Nokia WAP Gateway 4.0 CD3/ECD13_C/N ...

  8. 获取用户IP地址的三个属性的区别 (HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)

    一.没有使用代理服务 器的情况: REMOTE_ADDR = 您的 IPHTTP_VIA = 没数值或不显示HTTP_X_FORWARDED_FOR = 没数值或不显示 二.使用透明代理服务器的情 况 ...

  9. JAVA并发编程学习笔记------线程的三种创建方式

    创建线程一般有如下几个方式: 1. 通过继承Thread类来创建一个线程: /** * 步骤1:定义一个继承Thread类的子类 * 步骤2:构造子类的一个对象 * 步骤3:启动线程: * */ pu ...

随机推荐

  1. innodb 悲观锁,乐观锁

    转 http://www.cnblogs.com/chenwenbiao/archive/2012/06/06/2537508.html CREATE TABLE `products` ( `id` ...

  2. bzoj1098 1301

    这两题很类似,都是在补图上搜索 但是由于补图太大我们不能建出来 考虑先从一个点搜,每次搜可以搜的点, 然后维护一个链表,记录当前还没有搜过的点,搜过之后从链表中删除即可 type node=recor ...

  3. android MIPI屏 导航栏丢失

    /**************************************************************************** * android MIPI屏 导航栏丢失 ...

  4. RMAN数据库异机迁移步骤

    --RMAN数据库异机迁移步骤----------------------------2013/09/28 测试环境:AIX+ora11g   一. source数据库准备.   1.获取数据文件编号 ...

  5. 使用SignalR 提高B2C商城用户体验1

    vs2010 使用SignalR 提高B2C商城用户体验(一) 1.需求简介,做为新时代的b2c商城,没有即时通讯,怎么提供用户粘稠度,怎么增加销量,用户购物的第一习惯就是咨询,即时通讯,应运而生.这 ...

  6. Ext入门学习系列(五)表格控件(1)

    上节学习了Ext面板控件,为后面的各个控件学习奠定基础,在此基础上本章将学习网络开发最期待的功能——表格控件. 我们都知道网络编程语言中,除了.net其他的基本没有提供网格控件,而最近的asp.net ...

  7. Codeforces Round #355 (Div. 2)

    A 弯腰 #include<cstdio> #include<cstring> #include<iostream> #include<queue> # ...

  8. javascript设计模式6

    单体模式:用来划分命名空间而组织一些方法和属性的对象,如果它能被实例化,只能被实例化一次:但对象不是单体 var Singleton={ attr1:true; attr2:2, method1:fu ...

  9. 50道经典的JAVA编程题 (6-10)

    50道经典的JAVA编程题 (6-10),今晚做了10道了,累死了...感觉难度不是很大,就是不知道是不是最好的实现方法啊!希望大神们能给指点哈... [程序6]GCDAndLCM.java 题目:输 ...

  10. Barcode記錄

    .net開源框架 Barcode Rendering Framework URL:http://barcoderender.codeplex.com/releases/view/91902 可產生BR ...