现在的位置: 首页 > 综合 > 正文

山寨腾讯“爱消除”游戏之屏幕自动适配

2013年07月26日 ⁄ 综合 ⁄ 共 1827字 ⁄ 字号 评论关闭

【广而告之】山寨腾讯“爱消除”游戏已经正式入驻GitHub,项目地址是:https://github.com/3125788/CrazyLink

欢迎广大寨友一起来完善这个游戏。

山寨腾讯“爱消除”游戏7日教程中,我们留下了一个问题让广大寨友去思考:如何自适应屏幕适配?今天我们将要揭晓这个答案。

大家一定为适配ANDROID各种各样的屏幕吃尽了苦头,通用的做法是为不同的屏幕创建不同的资源文件及布局文件。可想而知,这会是多么大的一个工作量。

今天我们这里介绍的方法,利用了OpenGL ES天然的特性,只需要一套资源文件及布局文件,就可以完成对所有不同尺寸屏幕的适配。听起来是不是很COOL?

好吧,下面我们进入正题。

我们知道,ANDROID支持各种各样的屏幕类型及分辨率。如WVGA800、WVGA854、QVGA、HVGA、WQVGA400、WQVGA432,Denisty 有LOW、HIGH、MIDIUM等。

面对如此多的屏幕,首先要做的一件事情,就是选择一种主流的屏幕,在这种屏幕的基础上进行开发测试,今天我们选择的是WVGA800。其详细的参数如下图:

对应的设置代码如下:

	public static int VIEW_WIDTH = 480;
	public static int VIEW_HEIGHT = 800;
	public static int ADP_SIZE = 0;

以上三行代码在CrazyLinkConstent.java中能找到定义。这个定义约束了我们的设计是基于480*800这个分辨率的,不同的分辨率会根据ADP_SIZE计算出的值进行自动的变换。

关注下面这个函数:

        public void onSurfaceChanged(GL10 gl, int width, int height) {
       	
           	CrazyLinkConstent.translateRatio = (float) width / height;
        	CrazyLinkConstent.screentRatio = (float) width / height;      
   			CrazyLinkConstent.ADP_SIZE = CrazyLinkConstent.UNIT_SIZE * CrazyLinkConstent.VIEW_HEIGHT/height * width/CrazyLinkConstent.VIEW_WIDTH;   			
        	screenTouch = new ScreenTouch(mContext, width, height);        	
        	gl.glViewport(0, 0, width, height);        	
            gl.glMatrixMode(GL10.GL_PROJECTION);        
            gl.glLoadIdentity();            			
           	
           	gl.glOrthof(-CrazyLinkConstent.screentRatio*CrazyLinkConstent.GRID_NUM/2, 
           			CrazyLinkConstent.screentRatio*CrazyLinkConstent.GRID_NUM/2, 
           			-1*CrazyLinkConstent.GRID_NUM/2, 
           			1*CrazyLinkConstent.GRID_NUM/2, 10, 100);
        }

ADP_SIZE会在所有的渲染类(Drawxxxxx)中用到,根据自动算出的ADP_SIZE值,各种不同尺寸的屏幕得以自动适配。

计算方法如下:

CrazyLinkConstent.ADP_SIZE = CrazyLinkConstent.UNIT_SIZE * CrazyLinkConstent.VIEW_HEIGHT/height * width/CrazyLinkConstent.VIEW_WIDTH; 

自此,看似繁重的屏幕适配工作完成!!!!!!

WVGA的适配效果如下:

接下来看看HVGA的参数及效果:

QVGA的参数及效果:

WVGA854的参数及效果:

WQVGA432的参数及效果:

WQVGA400的参数及效果:


大家注意到:除了QVGA确实因为屏幕过小,有部分信息不能显示完整外,其余各种屏幕都适配的很好!

因此,为了达到好的适配效果,同时又能最大限度降低适配的工作量,选择一种主流的分辨率进行精心适配至关重要。选择不当,可能会使在不同分辨率下的效果差异很大。

喜欢这篇文章,就请你顶一下。

完整的源代码下载,请访问山寨腾讯”爱消除“游戏项目,地址是:https://github.com/3125788/CrazyLink

这个项目欢迎大家提交自己的修改。

抱歉!评论已关闭.