- 浏览: 517315 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
lin_kk:
最近正在学,请问LZ有源码事例吗,如果有能发一下我邮箱吗,万分 ...
使用libgdx及其中的box2d 2.1的注意事项 -
ahong520:
编译都通不过
ffmpeg对音频解码的一般步骤 -
辽东小小:
yajun_soft 写道XXX@XXX:~$ adb she ...
adb push的Permission denied -
cdtdx:
好文, 相当不错啊. 收了.
什么是app2sd,app2ext,data2ext?app移动到SD卡哪里去了? /mnt/asec /mnt/secure -
dickycat:
学习了,最近正在学这一块,年纪大了,学起来有点吃亏!
使用libgdx及其中的box2d 2.1的注意事项
关于libgdx和box2d的图形
在libgdx的stage或者spriteBatch里画图.图的对称点是左下角.
在libgdx的TextureRegion从Texture里取需要的区域时,图的对称点是左上角.
在box2d里body,图的对称点是中心(可能符合物理的重心吧).
还有在libgdx里面.导入的Texture图片.一定要是2的幂数.即2,4,8....1024.
如果想导入不是2的幂数的图片.只能把它放在一个符合2的幂数的Texture里面.再使用TextureRegion从该Texture里提取所需要的区域.
创造一个世界:
Vector2 gravity = new Vector2(0.0f, -1f);//设置世界的引力,如果游戏是顶级图的,则都设为0则可.
boolean doSleep = true;//是否允许刚体睡眠.最好true
World world = new World(gravity, doSleep);//创建世界
刚体共有三种类型,分别是staticBody,dynamicBody以及kinematicBody
其含意分别是指,静态刚体(即不受力影响的物体,比如边界墙),动态刚体(完全模拟真实物理情况的物体),运动刚体(这是2.1版新增的一个类型,和静态刚体相比,就是它可以移动.它也同样不会被环境力所影响)
创建一个刚体:
BodyDef bd = new BodyDef();
bd.type = BodyDef.BodyType.DynamicBody;//指定刚体的类型,默认为静态.
bd.position.set(x, y);//x和y指出刚体初始的位置.
Body b = world.createBody(bd);//刚体一定要通过world的createBody来创建,不能new.
b.setUserData(data);//设定刚体的用户数据.
PolygonShape p = new PolygonShape();
p.setAsBox(8.0f, 8.0f);//指定形状为长方形.
p.set(new Vector2[]{new Vector2(0,1),new Vector2(-1,0),new Vector2(1,0)});指定三角形,也可以指定更多Vector2,为多边形.多边形最多有8个边,并且多边形必须是凸边形.当然,你也可以使用组合来形成更为伪凹边形或者更复杂的形状.但最好请使用逆时针顺序.
FixtureDef f = new FixtureDef();
f.shape = p;//夹具的形状
f.density = 1.0f;//夹具的密度
f.friction = 0.3f;//夹具的摩擦力
b.createFixture(f);//刚体创建夹具.
刚体的createFixture有两种形式:
createFixture(Shape shape, float density)//传入形状Shape和它的密度.
createFixture(FixtureDef def)//传入夹具的定义,在传入前,已经定义好它的形状和密度等属性.
密度是用于计算刚体的质量属性的.就是说密度越大,该刚体越重.
摩擦力被用于使物体们在彼此间逼真的滑动.如一个刚体的摩擦力越大,撞在墙上反弹得越远.如果摩擦力小,撞在墙上可能会沾着墙一直滑动.
一个刚体可以创建多个夹具.如为一个世界创建四个边:
游戏在手机分辨率854*480且打横时运行.
BodyDef groundBodyDef = new BodyDef();
groundBodyDef.position.set(0, 0);
Body groundBody = world.createBody(groundBodyDef);
groundPolygonShape = new PolygonShape();
groundPolygonShape.setAsEdge(new Vector2(0, 480), new Vector2(0, 0));//使形状为边,左边.
groundBody.createFixture(groundPolygonShape, 0);
groundPolygonShape.setAsEdge(new Vector2(854, 480), new Vector2(854, 0));//右边
groundBody.createFixture(groundPolygonShape, 0);
groundPolygonShape.setAsEdge(new Vector2(0, 480), new Vector2(854, 480));//上边
groundBody.createFixture(groundPolygonShape, 0);
groundPolygonShape.setAsEdge(new Vector2(0, 0), new Vector2(854, 0));//下边
groundBody.createFixture(groundPolygonShape, 0);
开始模拟:
float timeStep = 1.0f / 60.0f;//刷新时间粒度
int velocityIterations = 6;//速度计算层级
int positionIterations = 2;//位置计算层级
world.step(timeStep, velocityIterations, positionIterations);//在这个Step方法中进行了碰撞的检测,速度的更新等操作,模拟要在一个循环里,才能持续
碰撞检测:
如果没有自定义设定world.setContactFilter.则box2d的碰撞是自动的.那么在碰撞后需要执行行为,要怎么做呢.我们可以通过world.setContactListener来检测碰撞,该接口有两个函数,endContact和beginContact,任何刚体开始碰撞都会执行beginContact,结束碰撞都会执行endContact.,参数Contact则是当前的碰撞,通过Contact.getFixtureA获得创建时间比较早的对象,Contact.getFixtureB获得创建时间晚的对象.然后大家可以在这两个函数里加上自定义的东西了.
碰撞过滤:
碰撞过滤的意思是我们可以指定哪些刚体会碰撞,哪些不会.如果没有设定world.setContactFilter.则使用默认的过滤,即全部刚体都会发生碰撞,ContactFilter这个接口里只有一个函数shouldCollide,字面意思就是"应该碰撞",是返回boolean类型的,我们就知道如果需要碰撞则返回true,不需要碰撞则返回false.函数有两个Fixture夹具.当两个刚体碰撞时,创建时间较早的是fixtureA,晚的是fixtureB.Fixtrue内置的filter也有相同的功能,但是有了ContactFilter后,也就不需要用了.
关于world的create和destroy要注意:
在游戏中create和destroy刚体或者关节的时候,记得要检测world锁的状态,否则有时候会出现错误isLocked()==false.因为当在world模拟step的时候,world.isLocked()是为true的,world无法create或者destroy.而此时我们又执行create或者destroy,所以就会出现错误了.
还有create和destroy不能在callbacks里面.否则也会出现上面的错误.在destroyBody函数的说明里有:This function is locked during callbacks. 此函数在callbacks里是上锁的,也就是不能使用的.callbacks就是如ContactListener里的beginContact函数,也就是被动执行的函数,被称为callbacks.
所以我们一定要在world.isLocked()==false的时候才能执行create和destroy.
在执行create和destroy前应该检测锁的状态:
if(world.isLocked())
return;//or do something else
Gdx中处理输入:
在Gdx中如果我们需要对输入有相应的操作,则应该Gdx.input.setInputProcessor.InputProcessor是输入处理器接口.里面包括了我们需要的各种回调函数callbacks.
touch类的:touchUp,touchMoved,touchDragged,touchDown;
key类的:keyUp,keyTyped,keyDown;
还有一个scrolled;//Called when the mouse wheel was scrolled. Will not be called on Android.
评论
学习了,最近正在学这一块,年纪大了,学起来有点吃亏!
夹具就是刚体的物理性质,如形状,密度,摩擦力等.
哦~ 明白了,Shape定义形状,Fixture定义物理性质,然后生成一个Body 就是一个物体了!
right~so smart~
夹具就是刚体的物理性质,如形状,密度,摩擦力等.
哦~ 明白了,Shape定义形状,Fixture定义物理性质,然后生成一个Body 就是一个物体了!
夹具就是刚体的物理性质,如形状,密度,摩擦力等.
有很多不是很明白
Sprite和你这里说的刚体有什么不同呢?
怎么给刚体指定个图片呢???
也没啥文档 不好学啊
嗯.超级悲剧的...
也没啥文档 不好学啊
发表评论
-
编译XT720 gingerbread
2013-05-04 11:18 867在android根目录下执行". build/env ... -
编译mx 内核成功
2013-03-18 17:48 875转 : http://hi.baidu.com/_xi ... -
ubuntu下面找不到ZTE V880设备
2012-12-06 16:22 839两种方法:第一种方法是你连上你的手机,重启电脑,再adb de ... -
Android中解决图像解码导致的OOM问题
2012-10-01 18:41 818http://7dot9.com/2011/08/androi ... -
编译Android下纯C的静态程序,undefined reference to raise
2012-07-08 23:28 2374尝试在Android下编译纯C的静态程序,执行gcc -v - ... -
开发Android下纯C程序时,打开时提示not found
2012-07-08 20:09 1380这个问题烦了我一天了..郁闷.本人想试验一下使用ndk里面的t ... -
NDK报错:make: *** 没有规则可以创建“obj/local/armeabi/objs/a/a.o”需要的目标“/a.c”。 停止。
2012-07-05 21:02 2179android开发用ndk编译so库时,有时直接从别的地 ... -
adb push的Permission denied
2012-05-30 17:19 3661遇到的问题是 zhanglanyun@zhanglan ... -
adb pull失败问题解决方法
2012-05-30 17:03 2187问题:使用adb pull命令从android系统中读取文件失 ... -
关于app2sd、a2sd、data2sd、a2sd+的区别的解释
2012-05-17 11:47 1066因为看到很多机友对这个概念不理解。首先解释一下这些缩写,全部的 ... -
什么是app2sd,app2ext,data2ext?app移动到SD卡哪里去了? /mnt/asec /mnt/secure
2012-05-17 10:56 3372Google Android手机的软件为了安全性和稳定性 ... -
android 如何自定义ProgressBar
2012-04-22 15:39 1915原文:http://blog.sina.com.cn/s/bl ... -
修改MAC,没有nvs_map.bin时该怎么做
2012-04-10 16:53 1826Basically: nvs_map.bin is what ... -
Android Activity LaunchMode 验证
2012-03-31 11:23 914在Android中,每个Activity有4种LaunchMo ... -
Android改变MAC地址
2012-03-30 13:42 21741.Find out your original MAC ad ... -
C通过JNI 层调用Java的静态和非静态方法
2012-03-26 09:47 39571、主要流程 1、 新建一个测试类TestProv ... -
使用ndk或linux下独立交叉编译(ffmpeg)
2012-03-18 21:48 23051、ndk 编译程序 在NDK的apps目录下创建he ... -
android-ndk-r7 编译 ffmpeg-0.10
2012-03-18 21:46 4603看了这篇文章 http://blog.sina.com ... -
android2.3 MODIFY_PHONE_STATE
2012-02-27 22:14 3064一直被一些莫名其妙的电话骚扰,而且只响两声就断了,一直 ... -
Androidmanifest.xml里的<uses-feature>
2011-12-27 17:10 1365如果你是一个Android用户,而且你有一个老旧的安装有and ...
相关推荐
《使用libgdx和Box2D构建简单游戏测试场景1》 在游戏开发领域,libgdx和Box2D是两个强大的工具,它们为开发者提供了丰富的功能和灵活性。libgdx是一个开源的游戏开发框架,支持多平台发布,包括Android、iOS、桌面...
一个libgdx下box2d的使用实例 包括box2d刚体创建,碰撞已经刚体和texture的绑定
这个专题系列聚焦于Box2D,一个广泛使用的物理模拟库,它被集成到Libgdx中,为游戏开发者提供了一个实现真实感物理效果的强大工具。Box2D使得开发者能够轻松地创建动态物体、碰撞检测、刚体动力学等,从而创造出更...
《Node.js与libgdx和Box2D构建的GLES2赛车游戏详解》 在现代游戏开发领域,Node.js可能并非第一选择,但它在构建服务器端逻辑或工具链时却有着广泛的应用。本项目名为"Node.js-一个GLES2自上而下的赛车游戏构建在...
在本项目"Libgdx(包含box2d)开发的PC版、Android版Flappy Bird"中,开发者使用了Libgdx来重制经典游戏Flappy Bird,以展示Libgdx的功能和Box2D物理引擎的应用。 首先,我们来了解一下Libgdx。Libgdx是一个用Java...
在这个名为"Libgdx box2d demo"的项目中,我们看到开发者使用Eclipse作为集成开发环境(IDE),加载并运用了Libgdx引擎,同时整合了Box2D物理引擎,创建了一个学习Box2D的实例。这个实例可能是一个基于小球的游戏,...
总之,"libgdx使用box2d的demo"是一个很好的学习资源,它帮助开发者了解如何在LibGDX环境中实现复杂的2D物理效果,这对于开发出更真实、更有趣的游戏至关重要。通过深入研究这个Demo,你将能够掌握一系列实用的技能...
四、使用Libgdx-Box2D开发游戏 在实际开发中,开发者首先需要创建一个World对象,然后定义Body及其Fixture。可以通过加载精灵图(Sprite)并创建对应的Body来实现游戏对象的物理行为。例如,创建一个角色Body时,...
其中,LibGDX 使用 JNI 封装了 Box2D,速度和易用性都不错。 下面,我们将详细介绍如何在 LibGDX 中使用 Box2D。 首先,我们需要创建一个游戏项目,并添加 LibGDX 依赖项。然后,我们可以开始编写游戏逻辑。 首先...
在本项目中,开发者利用了三个关键的开源库——Artemis Entity Framework、LibGDX 和 Box2D,创建了一个简单的直升机游戏。这些技术在Java编程中被广泛应用于游戏开发,各自都有其独特的功能和优势。 首先,让我们...
Box2D是一个流行的开源2D物理引擎,广泛用于游戏开发,特别是使用libGDX框架的项目。libGDX是Java的跨平台游戏开发库,它为Android、iOS、桌面(Windows、Mac、Linux)以及HTML5提供了统一的API。Box2D与libGDX结合...
uRacer:漂移之王GLES2自上而下的赛车手,构建在libgdx和Box2D之上。 免责声明该项目在我的硬盘上放置了太久了,因此我将其作为开源项目发布到hoRacer中:The Drift of Drift一个Glib2自上而下的赛车手,它建立在...
Overlap2D是一款免费且开源的2D场景和UI布局编辑器,专为Libgdx设计。这个工具由社区中的热心开发者贡献,旨在简化UI创建过程,提高开发效率。它允许开发者在可视化环境中设计界面,然后导出到Libgdx项目中直接使用...
《SkrGx2DModelEditor:libGDX与box2D融合的2D模型编辑神器》 在游戏开发的世界中,高效的工具是提升生产力的关键。SkrGx2DModelEditor,正如其名,是一个专门针对libGDX游戏框架和box2D物理引擎的2D模型编辑器。这...
极品飞车热Java(赛车模拟)带有LibGDX , BOX2D和平铺地图的NFS产品特点使用LibGDX游戏引擎, Box2D物理引擎和TiledMap开发所有车辆运动变量均根据物理定律进行计算 制动器加速度由下式计算uk * g ,并且g = 10 M/s...
LibGDX集成了Box2D库,用于处理刚体动力学。你可以创建Body、Fixture和Joint来模拟现实世界的物理行为,如重力、碰撞检测和摩擦力。 除此之外,LibGDX还提供了Scene2D库,用于构建2D用户界面(UI)。它包含各种...
Libgdx 团队为 Box2D C++ 编写了一个 JNI 包装器,flixel-gdx 团队编写了一个名为 FlxBox2D 的插件,以使在 flixel 中使用 Box2D 编写代码更容易一些。 ####License FlxBox2D 在新 BSD 许可下分发,这意味着您可以...
这是一个libGDX + Scene2D + Box2D原型游戏。 此处的代码将向您展示如何同时使用Scene2D和Box2D进行Android游戏。 这是YouTube教程系列“ 。 现在测试一下 只是想快速尝试一下已编译的应用程序? 在Google Play商店...
《使用libgdx开发2D横版过关游戏详解》 libgdx是一个强大的开源Java游戏开发框架,它允许开发者创建跨平台的游戏,包括Android、iOS、桌面系统以及WebGL。在开发2D横版过关游戏时,libgdx提供了一系列工具和库,...
5. **Box2D Integration**: 虽然Cuboc可能没有直接使用Box2D(libgdx的物理引擎),但libgdx完全支持Box2D,开发者可以创建复杂的物理世界,实现真实感的碰撞检测和物理模拟。 6. **Game States and Screens**: ...