Android游戏引擎之LibGdx

译自:http://code.google.com/p/libgdx/wiki

SpriteBitch:

Binding一个Texture是一个开销很大的操作.由于这原因,它通常存储很多小图到一个大图里去,然后再绘制大图的区域并避免Texture发生变化.更多信息参考TexturePacker

Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT)以清除屏幕.

所有的绘画操作的调用必须在begin和end函数之间.并且她们之间不能存在非SpriteBatch绘画的操作

 

Texture

它解码图像文件并加载到GPU内存,图片文件应该存放到assets文件夹下,图片的像素应该是2的幂

 

TextureRegion

描述了一个在Texture内的矩形,并是对于画一个存在于Texture中的部分非常有用.

 

Sprite

描述Texture的包括区域,将要绘制到的几何以及将要绘制的颜色.

 

Blending

混合默认情况下是启用的.这意味着,当一个Texture绘制的时候,它的透明部分与像素会在屏幕的对应位置被合并.当禁用该属性时,已经在屏幕的该位置上的将被Texture代替.

 

Viewport

SpriteBatch管理它自己的投影和变换矩阵.当一个SpriteBatch被创建的时候,它使用当前程序的大小并设置它的正投影使用Y坐标系统,当begin被调用时,它设置了ViewPort

 

Performancetuning

SpriteBatch有一个构造函数以用来设置在发送到GPU之前的最大可缓冲精灵数.如果这数字太小,会导致额外的GPU调用.如果太大,SpriteBatch将会须要更多的内存.

SpriteBatch有个公共的int型字段MaxSpriteInBatch,它表示在生命中最大的可以发送到GPU中的精灵数.设置一个非常大的SpriteBatch大小并检查该字段可以帮助确定最佳的SpriteBatch大小.它应该是大于等于或略高于maxSpritesInBatch一些.该字段在任何时刻可以被设置为0以重置它.

它有一个公共的int字段renderCalls.在end调用之后,改字段表示在最后一次调用begin和end之间多少次的几何被发送到GPU.当不同的Texture被bound时,或者SpriteBatch缓冲了足够多的精灵,如果SpriteBatch是适合大小的并且renderCall是大的(超过15-20),这时候表明许多Texture正在进行bind.

SpriteBatch有一个额外的构造函数以携带一个size和一个缓冲区大小的number.这是一个高级的功能将触发VBO被使用来代替正常的VA.缓冲的列表被保持,并且每个渲染调用使用列表中的下一个缓冲(循环).当maxSpritesInBatch低而renderCalls是高.这可能会提供一个小的性能提升.

 

scene2d

Scene2d包是一个用来管理层次的Actor组的2D场景图表.它提供了支持持有输入和在坐标系统中的相对于父Actor的图形选择和缩放.它通常提供一个随着时间的推移(渐变)的Actor操作的行为框架.该包提供用于构建GUI的Actor.

 

Importantclasses

Stage类有一个root组的以用来APP可以增加他们的Actor.Stage有一个Camera和一个SpriteBatch.该Camera的Viewport是屏幕的大小.当Stage被绘制,该SpriteBatch也被传输给root组.Stage是一个InputProcessor并传递input事件到root组.

组里的类是一个包含其他Actors的Actor.组中的旋转和缩放将会影响到它的子元素.组委托画图和input处理到合适的子元素.组转换坐标所以子元素在它自己的坐标系统中接受坐标.

Actor类提供在场景图中节点的所有基本功能.位置,大小,缩放,旋转,起点,颜色.它有一个可选的名字以用来允许Acttor去通过名字寻找它

 

Stagesetup

一个Stage有个viewport大小.这可以在构造函数中指定,这通常是一个好主意去设置Stage的viewport当APP重置大小时.该构造函数一般携带一个boolean值的’stretch’.如果true,Stage将被拉伸到设备的分辨率,如果false,Stage的更大分辨率会被拉伸到适应设备的分辨率.如果在resized函数中设置Viewport对于设备的分辨率,那么stretch设置将不会产生作用.

Stage有个’act’函数,它携带一个最后一帧的时间差.这将导致act函数在场景中的每个Actor被调用,允许Actors在一定时间内进行一些行为.Stage调用act是可选的.

 

Actors

继承抽象类Actor去绘制,碰撞检测,以及在场景图表中持有input

 

Drawing

当Stage的draw被调用,它在root组里调用draw.组在它的子元素中调用draw.绘制一个actor,实现draw函数:

SpriteBatch拿到的Actor是以及被父组转换了的,因此.Actor的位置,大小,旋转,缩放是从左下角开始计算.这使得在正确的地方使用SpriteBatch绘制很容易.

如果Actor的visible被设置成false,组不会调用该Actor的draw.

SpriteBatch的begin被完成调用当Actor的draw函数被调用.如果一个Actor需要执行draw以其他方式,例如携带ShapeRenderer,该batch需要被end然后重新开始begin.当然,这将导致该batch被刷新,所以要小心使用.

 

Hitdetection

当在Stage中hit被调用,它在组中调用hit.组在它的子元素中调用hit.第一次调用hit返回Stage中的一个Actor.要做hit检测,实现hit函数:

Hit函数返回hit了的Actor,如果没有hit则返回null.坐标系统被赋予给Actor的坐标系统.

 

Inputhandling

为了处理touches,实现touchDown, touchDragged, andtouchUp函数:

当touchDown发生在Stage,它在root组上调用touchDown.组在子元素上调用hit.touchDown函数在通过调用hit时返回的第一个Actor上发生.如果touchDown返回false,这意味着Actor选择区忽略该事件而处理器继续把它送达到下一个Actor.如果返回true,该Actor变成聚焦Actor.这意味着它将会受到touchDragged和touchUp调用,即使它们没有发生在该Actor上.当touchUp被调用,该Actor会失焦.

组的touchDown函数重写时,如果不调用super函数,那么子元素不会收到任何touch事件.

如果Actor的touchable被设置成false,组将不会对该Actor调用touch

要处理键盘输入,重写keyDown,keyUp,以及keyTyped函数.这些只会在Actor获得键盘焦点时调用(通过对Stage调用keyboardFocus)

 

MeshColorTexture

Mesh:

构造函数:第一个指定是否是静态.如果true将启用OpenGL有益的优化.第二,三个参数指定顶点和索引的数目.由于Mesh代表一个三角形,它有三个顶点.每个顶点在渲染时使用一次,所以Mesh需要三个顶点.最后我们传递一个VertexAttribute对象到指定参数.在VertexAttribute构造函数中,我们传递表示位置信息的Usage常数.然后传递一个整形数的代表每个位置的组件.由于位置由3个点构成(x,y,z)我们传递3个.最后我们设置VertexAttribute的别名.

创建Mesh之后,通过float数组指定它的顶点.第一个3个float是x,y,z的.下一个3个float构成顶点1,最后一个3个float构成顶点2.然后设置索引,以用来给三角形经过.

Mesh. render(int primitiveType, int offset,int type):参数一指定基本形态的类型.参数二如果Mesh代表一个顶点缓冲区时指定偏移量.顶点缓冲区将在以后教程中提到,这里只有0.最后一个参数指定Mesh使用的索引.

 

Texture

在Mesh上增加一个Texture,我们需要把一张图片放到我们的工作空间,创建一个Texture对象到代码中并引用那张图片,然后增加一个TextureAttribute到我们的Mesh

 

ProjectionViewportCamera

Camera.update():重新计算Camera的正投影和视图矩阵.

Camera.apply():设置当前Camera的投影和模型视图矩阵.仅适用于GL10和GL11.确保在调用它之前先调用update()函数.

Projection

一直在使用的OrthographicCamera只能用于制作2D效果,3D效果需要使用透视投影(perspective projection).

Camera.rotate():基于给定的旋转轴进行旋转.

Camera.translate():在给定的旋转轴移动相机


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值