本文转自:http://www.2cto.com/kf/201409/333604.html,感谢作者分享!
1.解决方案
先直接给出解决方案,再慢慢解释,当然这个解决方案也不是完全完美的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
//如果是横屏游戏:
glview->setDesignResolutionSize(
960
,
640
ottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.1em!important; margin:0px!important; outline:0px!important; overflow:visible!important; padding:0px!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:Consolas,ResolutionPolicy::FIXED_HEIGHT);
//一张960x640的背景显示
auto visibleSize = Director::getInstance()->getVisibleSize();
auto Bg = Sprite::create(
"Bg.png"
);
this
->addChild(Bg);
Bg->setPosition(visibleSize.width /
2
ottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.1em!important; margin:0px!important; outline:0px!important; overflow:visible!important; padding:0px!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:Consolas,visibleSize.height /
);
//Bg->setPosition(visibleSize.width / 2,320);//等价上面的
Bg->setScaleX(visibleSize.width /
);
auto Spr = Sprite::create(
"test.png"
);
->addChild(Spr);
Spr->setPosition(visibleSize.width -
50
ottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.1em!important; margin:0px!important; outline:0px!important; overflow:visible!important; padding:0px!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:Consolas,visibleSize.height -
);
//因为是固定高度,所以visibleSize.height永远都是640,所以下面的写法也是可以的
//Spr->setPosition(visibleSize.width - 50,590);
//如果是竖屏游戏:
ottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.1em!important; margin:0px!important; outline:0px!important; overflow:visible!important; padding:0px!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:Consolas,ResolutionPolicy::FIXED_WIDTH);
|
美术出图都按照960x640规格出图。
2.开始测试各种适配方式
屏幕适配其实应该从Opengles开始讲的,这里跳过了,感兴趣的可以看这篇文章了解一二《Android 中使用OpenGL ES进行2D开发(绘制第一个三角形番外篇)》
glview->setDesignResolutionSize(960,640);先不管第三个参数。setDesignResolutionSize是什么意思呢?就是设置一个固定大小的区域来进行程序布局和美术设计。再通过Opengles进行投射到具体手机屏幕上去,是无视具体手机屏幕大小的。比如手机屏幕分辨率是480x320,Opengles会自动缩小一倍进行投射。手机屏幕分辨率是1920x1280,Opengles会自动放大一倍进行投射。程序和美术这块都不需要改:一套程序坐标,一套美术资源。
比如背景图片,只需要一张960x640的就OK了,把它放在(480,320)的中心位置就OK了。
一个精灵假设要放在右上角的位置,把它放在(960,640)的位置就OK了。也根本不需要考虑cocos2d中的visibleSize什么的。
现实中,手机分辨率不可能都是960x640的倍数。而我们又要全屏显示,就有了第三个参数来规定具体投射的方式。
cocos2d的ResolutionPolicy现在总共有5种:
enum
class
ResolutionPolicy
{
EXACT_FIT,
NO_BORDER,
SHOW_ALL,
FIXED_HEIGHT,
FIXED_WIDTH
};