libgdx学习记录18——Box2d物理引擎
libgdx封装了Box2D物理引擎,通过这个引擎能够模拟物理现实,使设计出的游戏更具有真实感。
libgdx中,Box2d程序的大概过程:
1. 创建物理世界world,并设置重力加速度。
2. 创建正交相机,并设置其宽高。Box2d中使用物理世界中米作为单位,而不是图像中的像素,通常设一个比值,这里为了方便,直接设置为10。
3. 创建世界中的动态物体(一般是方块、圆环或其他形状物体)和静态物体(主要指地面、墙壁等)。
4. 在渲染函数中添加world时间布,并利用DebugRenderer将添加的物体绘制出来即可。
具体代码实例:
package com.fxb.newtest; import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.physics.box2d.Body;
import com.badlogic.gdx.physics.box2d.BodyDef;
import com.badlogic.gdx.physics.box2d.Box2DDebugRenderer;
import com.badlogic.gdx.physics.box2d.CircleShape;
import com.badlogic.gdx.physics.box2d.Fixture;
import com.badlogic.gdx.physics.box2d.FixtureDef;
import com.badlogic.gdx.physics.box2d.PolygonShape;
import com.badlogic.gdx.physics.box2d.World;
import com.badlogic.gdx.physics.box2d.BodyDef.BodyType; public class Lib018_Box2d extends ApplicationAdapter{ World world;
OrthographicCamera camera;
Box2DDebugRenderer debugRenderer;
ShapeRenderer rend; @Override
public void create() {
// TODO Auto-generated method stub
super.create(); world = new World( new Vector2( 0, -10f ), true );
debugRenderer =new Box2DDebugRenderer(); camera = new OrthographicCamera();
camera.setToOrtho( false, Gdx.graphics.getWidth()/10, Gdx.graphics.getHeight()/10 ); ////create the body of box
BodyDef boxBodyDef = new BodyDef();
boxBodyDef.type = BodyType.DynamicBody;
//boxBodyDef.position.x = -24 + (float)(Math.random() * 48);
//boxBodyDef.position.y = 10 + (float)(Math.random() * 100);
boxBodyDef.position.set( 40, 50 );
Body boxBody = world.createBody(boxBodyDef); PolygonShape boxPoly = new PolygonShape();
boxPoly.setAsBox(2, 1);
boxBody.createFixture(boxPoly, 1);
boxPoly.dispose(); /////create the body of circle
BodyDef bodyDef = new BodyDef();
bodyDef.type = BodyType.DynamicBody;
bodyDef.position.set( 60, 100 );
Body bodyCircle = world.createBody( bodyDef ); CircleShape circle = new CircleShape();
circle.setRadius( 2 );
FixtureDef fixtureDef = new FixtureDef();
fixtureDef.shape = circle;
fixtureDef.density = 1f;
fixtureDef.friction = 0.4f;
//fixtureDef.restitution = 0.6f; bodyCircle.createFixture( fixtureDef );
circle.dispose(); /////create the body of ground, static body, can't move
BodyDef groundBodyDef = new BodyDef();
groundBodyDef.type = BodyType.StaticBody;
groundBodyDef.angle = (float)Math.PI*15/180;
groundBodyDef.position.set( 0, 0 );
Body groundBody = world.createBody( groundBodyDef ); PolygonShape groundBox = new PolygonShape();
groundBox.setAsBox( camera.viewportWidth+5, 0.5f );
groundBody.createFixture( groundBox, 0.0f );
groundBox.dispose(); } @Override
public void render() {
// TODO Auto-generated method stub
super.render();
//Gdx.gl.glClearColor( 1, 1, 1, 0.2f );
Gdx.gl.glClear( GL10.GL_COLOR_BUFFER_BIT ); world.step( Gdx.graphics.getDeltaTime(), 6, 2 );
camera.update(); debugRenderer.render( world, camera.combined ); } @Override
public void dispose() {
// TODO Auto-generated method stub
debugRenderer.dispose();
world.dispose();
super.dispose();
} }
运行结果:
程序中,添加了方块、圆环和地面三个物体,前两个为动态,地面为静态,让地面倾斜15度。
方块和圆环从高空下落到斜坡时,就向下滑动,与我们平常生活常识相吻合。
libgdx学习记录18——Box2d物理引擎的更多相关文章
- libgdx学习记录21——Box2d物理引擎之碰撞Contact、冲量Impulse、关节Joint
Box2d中,物体可以接受力(Force).冲量(Impulse)和扭矩(Torque).这些物理元素都能改变物体的运动形式,并且默认都会唤醒物体,当然只是针对动态物体. 力是一个持久的效果,通过Bo ...
- 【极客学院出品】Cocos2d-X系列课程之九-BOX2D物理引擎
Cocos2d-x 是时下最热门的手游引擎,在国内和国外手机游戏开发使用的份额各自是70%和25%,在App Store的top10中,有7个是用它开发的. 本节课程为Cocos2d-x系列课程之九, ...
- 瘸腿蛤蟆笔记29-cocos2d-x-3.2 Box2d物理引擎dynamics模块介绍
转载标明出处:http://blog.csdn.net/notbaron/article/details/38611335 上篇回想 本篇名言:奋斗.寻觅.发现,而不屈服.[诗人丁尼生] 上篇中,我们 ...
- 实例介绍Cocos2d-x中Box2D物理引擎:使用关节
下面我们将使用Box2D物理引擎技术进行重构.使得关节能够掌握如何在Box2D使用关节约束.HelloWorldScene.cpp中与使用关节的相关代码如下: void HelloWorld::add ...
- 实例介绍Cocos2d-x中Box2D物理引擎:碰撞检测
在Box2D中碰撞事件通过实现b2ContactListener类函数实现,b2ContactListener是Box2D提供的抽象类,它的抽象函数:virtual void BeginContact ...
- 实例介绍Cocos2d-x中Box2D物理引擎:HelloBox2D
我们通过一个实例介绍一下,在Cocos2d-x 3.x中使用Box2D物理引擎的开发过程,熟悉这些API的使用.这个实例运行后的场景如图所示,当场景启动后,玩家可以触摸点击屏幕,每次触摸时候,就会在触 ...
- cocos2d-x中的Box2D物理引擎
在Cocos2d-x中集成了2个物理引擎,一个是Chipmunk,一个是Box2D.前者是用C语言编写的,文档和例子相对较少:Box2D是用C++写的,并且有比较完善的文档和资料.所以在需要使用物理引 ...
- python下的Box2d物理引擎的配置
/******************************* I come back! 由于已经大四了,正在找工作 导致了至今以来第二长的时间内没有更新博客.向大家表示道歉 *********** ...
- 实例介绍Cocos2d-x中Box2D物理引擎:碰撞检測
在Box2D中碰撞事件通过实现b2ContactListener类函数实现,b2ContactListener是Box2D提供的抽象类,它的抽象函数:virtual void BeginContact ...
随机推荐
- web调试-禁止/清空chrome页面缓存
Chrome会对页面缓存,web页面调试的时候,后端修改页面.js之后,刷新页面经常不生效,非常不方便. 有一些小技巧可以解决该问题. 技巧一: 开发者工具-setting/设置,可以关闭缓存. 开发 ...
- Win10命令行激活 & 电脑组装
系统激活: 1. 管理员身份运行 cmd 2. slmgr.vbs /upk ...
- python编写脚本
#!/usr/bin/env python #-*- coding:utf-8 -*- import sys import os from subprocess import Popen,PIPE c ...
- python的函数(三)
1,函数多类型传值和冗余参数 2,递归函数 1,函数多类型传值和冗余参数 1.0,函数多类型传值 定义1个函数, def fun(x,y): return x+y 调用该函数print fun(1,2 ...
- xp_readerrorlog与sp_readerrorlog
SQL SERVER 可以使用xp_readerrorlog 或者sp_readerrorlog来查看错误日志. xp_readerrorlog 一共有七个参数: 1. 存档编号 2. 日志类型(1为 ...
- EJB2.0 ejb-jar.xml配置文件详解
<ejb-jar><!--EJB发布描述器的根元素,它包含一个可选的EJB-JAR文件的描述,可选显示的名称,可选小图标的文件名,可选的大图标的文件名,必须的所有被包含的enterp ...
- Redis雪崩、穿透、热点key等优化
一.缓存 Redis做缓存是最常见的应用场景.客户端请求在缓存层命中就直接返回,如果miss就去读取存储层,存储层读取到就写入缓存层,然后再返回到客户端. 优点: 加速读写 降低后端负载 缺点: 数据 ...
- facebook api & oauth protocal
http://tools.ietf.org/html/draft-ietf-oauth-v2-31#section-10.5 http://stackoverflow.com/questions/14 ...
- PyQt5--QLineEdit
# -*- coding:utf-8 -*- ''' Created on Sep 20, 2018 @author: SaShuangYiBing Comment: ''' import sys f ...
- postgresql+postgis+pgrouting实现最短路径查询(1)---线数据的处理和建立拓扑
准备一个线shp数据,并将其导入postgres里面,postgres安装postgis和pgrouting两个插件(方法见http://www.cnblogs.com/nidaye/p/455352 ...