地球人己阻止不了程序猿们学习cocos2d-x了-学习札记03

地球人己阻止不了程序猿们学习cocos2d-x了-学习笔记03

地球人己阻止不了程序猿们学习cocos2d-x了-学习笔记02

 

笨木头花心贡献,啥?花心?不呢,是用心~

转载请注明,原文地址
 http://blog.csdn.net/musicvs/article/details/8124244

正文:

 

 

原教程地址:http://cn.cocos2d-x.org/bbs/forum.php?mod=viewthread&tid=852&extra=page%3D1

 

首先,我要恭喜一个人那就是我了,噗。因为我终于成功在VMWare上安装了Mac系统并且把Xcode也安装好了,并且把Cocos2d-X也安装好了,并且也成功运行HelloWorld~

 

好了,进入正题,教程的第三篇讲的都是在各个平台的屏幕适应问题,我看了作者的教程(而且不止一遍= =),可惜,作者的教程好像是基于1.x版本的,对于2.x版本来说,几乎无效了,但是我是在看了很多遍、照着写了很多代码、测了很多次、电脑死机好几回、百度百地网页都要烂掉了才发现的啊混蛋~噗,开玩笑,不过我真是弄了很久才发现。。。

 

原来,官方早就告诉我们一个最简单的屏幕适应方法了(是基于2.0.2版本新增的):

Multi-resolution support

The diverse set of resolutions on Android devices is hard to adapt to. Cocos2d-x offers CCEGLView::setDesignResolutionSize() to help your game run on different resolutions with minimal amount of work.

The principle

By adjusting OpenGL ES viewport, we can choose a different drawing region. So we can use this feature to zoom in or zoom out the picture.
CCEGLView::setDesignResolutionSize() accepts design resolution size and policy, then adjusts viewport to map to the device's screen according to the policy.

 

CCEGLView::setDesignResolutionSize(),就是它了,只要有它就搞定了。

怎么使用?看看官方的HelloCpp

bool AppDelegate::applicationDidFinishLaunching() {
    // initialize director
    CCDirector *pDirector = CCDirector::sharedDirector();
    pDirector->setOpenGLView(CCEGLView::sharedOpenGLView());
    TargetPlatform target = getTargetPlatform();

    if (target == kTargetIpad)
    {
        // ipad
        CCFileUtils::sharedFileUtils()->setResourceDirectory("iphonehd");
        // don't enable retina because we don't have ipad hd resource
        CCEGLView::sharedOpenGLView()->setDesignResolutionSize(1024, 768, kResolutionNoBorder);
    }
    else if (target == kTargetIphone)
    {
        // iphone
        if (pDirector->enableRetinaDisplay(true))
        {
            // iphone hd
            CCFileUtils::sharedFileUtils()->setResourceDirectory("iphonehd");
        }
        else 
        {
            CCFileUtils::sharedFileUtils()->setResourceDirectory("iphone");
        }
    }
    else 
    {
        // android, windows, blackberry, linux or mac
        CCFileUtils::sharedFileUtils()->setResourceDirectory("iphonehd");
        CCEGLView::sharedOpenGLView()->setDesignResolutionSize(1024, 768, kResolutionNoBorder);
    }
    return true;
}


 

当然,我省略了一些代码,看到红色的数字了吗?1024 768,这个数字的含义就是:我们在开发过程中会使用1024 * 768规格的素材。

然后在不同大小的屏幕中,程序就会自动帮我们拉伸屏幕。

 

setDesignResolutionSize有三个参数,刚刚说了两个,第三个参数的含义是:

kResolutionExactFit ---强制全屏,当屏幕宽高规格和原始素材比例不一致的时候,可能会把屏幕挤压。

 

kResolutionNoBorder ---当出现屏幕规格和原始素材比例不一致时,将会切去屏幕边缘,以免出现挤压画面的现象。

 

kResolutionShowAll ---当出现屏幕规格和原始素材比例不一致时,会用黑色填充多余部分,这种方式不会造成屏幕挤压,但是会出现黑边。

 

Win32的截图有点大,我就不截了,看看Iphone模拟器的:

地球人己阻止不了程序猿们学习cocos2d-x了-学习札记03

 

另外,Ipad模拟器总是不行,不知道是什么问题,先不管了。

 

然后是Android的截图:

地球人己阻止不了程序猿们学习cocos2d-x了-学习札记03

 

不过,问题还没有结束呢,这只是完成了图片的自适应,还有文字大小、精灵坐标呢?都没有问题吗?

于是我又找度娘了(我比较爱度娘,谷歌?小时候跟它不熟,噗),然后发现有人也问了差不多的问题:

地球人己阻止不了程序猿们学习cocos2d-x了-学习札记03

 

一楼那个可是Cocos2d-x的成员吖,它说了两个东西:VisibleSize和VisibleOrign,好像只要是在定坐标的时候用了这两个东西,就可以了:

// add "HelloWorld" splash screen"
CCSprite* pSprite = CCSprite::create("background.png");

// position the sprite on the center of the screen
pSprite->setPosition(ccp(visibleSize.width/2 + origin.x,
 visibleSize.height/2 + origin.y));


 

简单地测试了一下(我上面那两张截图就是用了这个的),好像是没啥问题了。但是,我总感觉不会这么简单?要到真正去开发游戏的时候才会遇到问题吧?那就等遇到了再解决了。

 

好了,我现在是很开心的,但是好累,噗,太少运动了,每天40个俯卧撑之外,连楼梯都没有走过。。。这几天遇到太多问题,太消耗精力了。

 

什么?想要Demo?去找找cocos2d-x的demo工程吧,里面有个HelloCpp工程,那个就是Demo了,噢,对了,是2.0.2的版本哈。

 

嗯,准备开始第四篇的学习了,希望困难少那么一点点了,噗。

 

请允许我做个广告。

AndroidFans论坛,我经常在这活动,欢迎来交流:笨木头邀请您访问Android 开发论坛:
http://www.android-fans.net/?fromuid=35

 

 

.

.