cocos2d-x iphone 移植到android,cocos2d-x项目从Win32移植到Android(全屏匹配)适配

不小心看到了,留下备用,不敢保证这个正确,望大家多多尝试,over后给个结果……

大家都知道,cocos2d-x可以在Win32和Mac下面开发,而我现在Win32下搭建Visual Studio 210开发的,Mac下可以使用Xcode + Eclipse ,两种环境应该差不多了。

现在进入正题:

我已经在Win32下开发好了一款1024*768的游戏,这是针对ipad开发的,比例是4:3.移植到ipad上没有问题。现在的如何把它移植到Android,移植到Android上面是最头痛的问题,因为你将要面对的是千千万种的机型和分辨率,而这次我能成功移植到Android上主要有两点关键因素:第一,cocos2d-x提供了一种快速适配的方法,在你创建的Android项目里面的jni/helloWorld里面的main.cpp文件的上有setDesignResolutionSize(float w, float h)这个函数,w和h设置为你之前在Win32下开发的时候使用的分辨率即可,比如,我的是(1024, 768)。然后移植到Android上后,游戏将始终以4:3的比例进行显示。这是为什么呢?接下来我们来详细看一下setDesignResolutionSize(float w, float h)这个函数到底是如何实现的。

先看这个函数的实现:

void CCEGLViewProtocol::setDesignResolutionSize(float width, float height)

{

if (width == 0.0f || height == 0.0f)

{

return;

}

m_sSizeInPoint.setSize(width, height);

// calculate the factor and the rect of viewport

m_fScreenScaleFactor = MIN((float)m_sSizeInPixel.width / m_sSizeInPoint.width,

(float)m_sSizeInPixel.height / m_sSizeInPoint.height);

float viewPortW = m_sSizeInPoint.width * m_fScreenScaleFactor;

float viewPortH = m_sSizeInPoint.height * m_fScreenScaleFactor;

m_rcViewPort.setRect((m_sSizeInPixel.width - viewPortW) / 2, (m_sSizeInPixel.height - viewPortH) / 2, viewPortW, viewPortH);

CCLOG("m_fScreenScaleFactor = %f", m_fScreenScaleFactor);

m_bNeedScale = true;

}

首先,m_sSizeInPoint为我们初始的型号,m_sSizeInPixel为我们将要匹配的机型的型号

其实,求出最小缩放因子m_fScreenScaleFactor,将初始的型号按这个比例缩放

最后,在要匹配的手机上面,用Opengl在匹配的手机的正中央绘制出缩放完后的游戏。

总结:缩放完后的游戏中的任何东西都不会出现变化,因为我们对对这个游戏进行匹配缩放的,不会影响游戏本身,但是这种缩放会带来的一个很明显的问题就是,只要你的手机不是4:3的分辨率的,那它必然会带来黑边,只是不同手机黑边大小不同而已。还有一个问题就是,假如你将要匹配的手机的分辨率如果比原分辨率小,会缩小;反之,将显示原始大小,并不会放大。(顺便提一下,若想放大,把MIN改为MAX即可)。

我这次要匹配的手机的分辨率是1280*720, 854*480, 960*540, 800*480,前三款都是16:的,最后一个是接近16:9的。

接下来我的事情就简单多了,我只要将我之前的游戏修改为1280*720,也就是16:9的比例,然后按照cocos2d-x提供的自适配即可实现这4款手机的匹配,而只有800*480会出现小小的黑边。

现在剩下的问题就是我如何快速的把之前1024*768的游戏快速修改为1280*720的,这个问题我还真没什么好的想法,之前以为若是在1024里面使用相对位置,到1280就不用调试位置了,后来想想这是不行的,比如我之前有A(0,width/2), B(0, Width),显而易见,它们两相距512, 而到了1280中,它们就相距640了。在我的游戏里面,这是会影响到的。(其实关于这些像素,分辨率,/32后转换为米等等的概念,我还不是很明白,有谁比较了解的也麻烦指导一下)。

所以我使用的是最低效的办法(个人认为 – -!),也就是,图片我还是使用原来的(有必要的话,个人觉得还是要重做图片),然后重新调整游戏中的元素位置。这边带来的一个问题就是,本来是在1024中使用的图片,你放到了1280中使用,而你的游戏中的元素的相对位置又要跟之前的一样,会留出一部分空白。其实真个重新调整完后的游戏,就是原来的游戏放到新的1280分辨率的中间,然后背景摊开。这就另我很纠结了,为什么我不利用cocos2d-x的自适配再单独修改背景呢,因为就是我不知道怎么弄,因为只适配是把这个游戏当作一个节点进行缩放后再绘制出来的,也就是说,我对游戏中进行任何修改,对自适配都没有影响。

也是我对Opengl不熟悉的原因,希望以后能找到更简便的匹配方式。

到这边,1280分辨率的游戏重新搭建完了,然后使用cocos2d-x的自适配就OK了。

摘自:http://jetion.diandian.com/post/2012-10-20/40039154534

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值