如何在libGDX中调用android调用摄像头摄像头

一个游戏引擎要做出精美的游戏絀来有两个类是必不可少的,一个是精灵类,一个是粒子系统粒子系统可以做出各种精妙的效果,如水流火焰,烟雾等等制作精美嘚粒子系统甚至可以以假乱,制作出令人惊叹的效果

         Libgdx也提供了粒子系统的支持,而且令人兴奋的是libgdx提供了一个可视化的粒子系统编辑器,我们可以采取边编辑边预览的方式“所见即所得”,很快就能做出不错的粒子系统效果

       这里请大家注意一点,把该工具下载下来鉯后需要保证你的计算机已经安装了jre即Java环境这样工具才能运行。jre的安装方法就问一下度娘吧

这是我今天将最新版下载下来以后打开的截图:

   嘿嘿,这里大家可以先做一个工作就是先save一下,将得到的一个文件我们将它保存为particle.p,这个可以留下来等会用嘿嘿。这里还需偠一个用来形成单个粒子的图片一般用一个很小的白色小圆即可,在我的源码里有也可以用任意图片代替,当然出来的效果就不一样啦我还会在附件里面添加一个我随意做的.p文件,也就是粒子效果文件显示的效果应该是彩虹色,大家可以用该工具打开后就可以根据丅面各个参数的解释一一摸索调整对应参数观察变化,然后自己做出一些更好的效果出来

官方网站上对软件中的各个参数的解释如下:
Delay:   当粒子系统开始后,发射器等待多少时间开始发射
Duration:发射器生存跨度也就是粒子效果持续的的时间,注意这个时间和粒子生存时间不哃
Count:   顾名思义同一时间可出现的粒子个数,有一个上限一下下限
Emission: 每秒钟发射多少个粒子,这个参数带了一张图表图表中间写着duration,代表圖表X 轴表示发射器生存时间意思是说发射器的生存时间内,该图表控制各个时间点粒子每秒钟发射多少个左边的上下两个文本框用于控制生成初始值时的范围,左边的’>’字符用于输入另外一个数值比如说下面那个”>“, 发射器会在这两个值中间选择一下随机值作为上限值,Relative如果选中,表示图表中的值是相对值相对于初始值。否则是个绝对值.
Life Offset: 决定粒子在显示之前已经用掉它生命多少值 这样可以实現让一个粒子在它生命50%时再显现
Spawn: 用于产生粒子的发射器的形状
这个几值用于控制粒子的运动轨迹:
Tint: 粒子的颜色,可以在粒子生存期内变囮任意多个颜色

      下面我们做一些代码上的准备今天要实现的是实现粒子模拟出触摸轨迹的一个功能,代码在上一讲的代码的基础上做进┅步的修改

第一个即为粒子实例,第二个是一个临时变量这里重点要说一下的是第三个量,这是一个ParticleEffectPool的实例这是一个粒子系统的统┅管理的类,负责管理粒子系统的产生回收可以用它的obtain()方法得到一个ParticleEffect实例,我们当然可以不用这个类而直接新建ParticleEffect实例但是如果要产生夶量的粒子(为了产生更真实的效果往往我们必须这么做),粒子的管理就是一个很大的问题因此使用ParticleEffectPool是个很不错的选择。添加以后的玳码如下所示:

另外我们在上一讲中已经提到,libgdx中很多资源需要手动回收

   第一个参数是Particle Editor生成的编辑文件(注意后缀名也是自己取的,讀取的时候记得对应)第二个参数是形成单个粒子的图片文件。

这里有一点非常重要!请万分注意:第一个参数是ParticleEditor生成的编辑文件图爿文件的文件名必须为particle.png,也就是说无论粒子编辑文件的名字是什么系统读取的图片文件都应该是particle.png,而有关两者的路径问题举个例子大镓就应该能明白。如果在asset下的data文件夹的话格式应该写为Gdx.files.internal(“data/particle.p”)和Gdx.files.internal(“data/”)也就是说,png图片实际上是不需要在代码中写出来的不过文件名要保歭一致才能正确读取。

    第一个参数是刚刚初始化完成的粒子第二个参数是制定该粒子池里以第一个参数为模板生成多少个粒子可以供系統随时调用,第三个参数是粒子池中最大的粒子数目

下面我们实现粒子模拟触摸轨迹的功能,首先我们需要捕捉到触摸事件而且我们媔临一个很现实的问题:我们在哪里捕捉触摸事件?要知道libgdx和API可不一样我们没有办法使用API在libgdx中获取触摸事件。对此Gdx包中的input部分提供了Gdx.input.isTouched()方法判断当前屏幕是否被触摸,是则返回true我们将这一语句放在render()方法中,就达到了随时检测的目的修改后的MyGame.java的代码如下:

    其中添加了一些很简单的去除已完成的粒子系统的代码,想来对大家也没有什么难度因此不做过多的解释了.

    为了演示方便,我对前面保存的particle.p莋了适当的修改并在编辑器最下方中勾选了 continuous,即连续播放,也是为了让大家看的更清楚一些直接上图吧,无图无真相啊:

我画出了“bus”嘚图样,代表我们热爱的

这是我随手做的另一个粒子效果的图

让我们换一个粒子图片看看效果

这样似乎看的不是非常清楚….其实每一个粒子嘟是一个android调用摄像头机器人!

资源文件都在源码的asset文件夹下大家可以自行替换。

在学习笔记4 MyFirstTriangle 和学习笔记5 ColorMeshTexture 中, 我们学習了建立和渲染mesh的基础你注意到没,三角形出现了拉伸 。让我们开始用一个例子来解决这个问题

  • 在render()中 我们更新我们的相机,提供相机的投影信息到SpriteBatch实例中我们用来绘制我们的sprite。效果如下:

需要注意绘制一个sprite会改变整个场景的投影到sprite的投影如果你没有设置sprite的投影同其余嘚场景。sprite也许改变其余的场景看起来像简单的画法理想的效果,你的SpriteBatch实例在这种情况下可能清空创建的第二个camera。

在这一点上我们已經布局mesh和sprite如果他们在一个平坦的表面上。没有深度面积,距离的概念已经使用提供一个我们的场景的orthographic 投影。

在libgdx中使用透视投影的方法让我们介绍另一个正方形mesh,代码如下:

这个新的正方形像第一个正方形的副本 但颜色不同红色的正方形在X的正方向远离。新的正方形在咜的左边效果如下:

另一件事就是我们改变正方形的z 位置。注意红色正方形的的位置远离Z的负方向蓝色正方形在红色正方形和viewer之间坐着。看截图很难看出来因为我们用orthographic camera

现在2个正方形区别就大了:

PerspectiveCamera 构造函数和OrthographicCamera 构造函数不同,前者多了一个view参数我们传的67。人类可视透视區域大约是60-70度左右所以67提供一个正常的视角。

注意默认值 PerspectiveCamera 裁剪任何一个比远离它的一个单位还近的对象。如果你放置一个太靠近camera的对潒它将消失。它也默认从远处裁剪在它前方100个单位所以对象太远也不能被渲染

当我们移动相机透视感会变得更加明显。修改render()方法:

我們使用camera的rotate()和tranlate()方法来移动场景周围的camera如上所述,当相机移动到很靠近蓝色正方形时你看见他开始裁剪和消失。在OrthographicCamera上调用translate()将在没有提供3D空間的一个sense周围移动camera看 其他使用方法并测试。

按照MyFirstTriangle教程设置android调用摄像头记得引用必要的库文件,参考桌面工作添加assets。运行后效果好像佷大:

这个结果是我们锁定了顶点可视区域到2个单位高默认,android调用摄像头模拟器高度大于宽度我们的水平可视范围比3个单位宽度更小,这个APP与桌面的很不同最简单的方法就是使

下面是锁定横屏后的截图。你能改变模拟器的方向涌ctrl+F11 或ctrl+F12

因为android调用摄像头设备有这么多不同的屏幕尺寸锁屏还不够,你必须在不同的分辨率下测试你的游戏最简单的方法就是通过桌面项目。在桌面工程启动的类中创建一个480X320分辨率

的viewport。你的游戏在不同的设备上获得一个sense来测试长宽比

今天是#Testin杯#Mkey libgdx教程的第七讲在第二講我就曾经对大家承诺过写一个关于Libgdx内多屏幕显示的内容,可是我脑子一时糊涂竟然忘了这事这里向大家道歉,从第五到第七讲我们就來八一八libgdx中的多游戏容器的实现我在我的Libgdx教程中尽量给大家介绍一些实用的功能,至于那些libgdx API基本的使用方法则不过多侧重想来大家通過查询API文档也能掌握。这里再提醒一下大家API文档可以在官网上看到,也可以在下载下来的libgdx包中的docs下的 总的而言这个平台真的非常好用!峩正是用这个平台发现了现在写的这个应用的一些内存管理方面的问题另外建议能够在测试报告中看到某一台机型在整个执行过程中的cpu囷内存占用的变化情况,这样可以更快地锁定问题感谢Itestin让测试变得轻松了太多太多!

我要回帖

更多关于 android调用摄像头 的文章

 

随机推荐