Cocosd-x屏比

Cocosd-x屏比,第1张

概述完美主义情况下android自适屏,最好的方式当然是做多套不同分辨率屏幕大小的图片资源,但是一般作为我们这样的小团队开发,不会去花费太多的时间去做多套不同的资源,能给你多做几个封面就不错了,所以这个重任又从美术的头上落到我们程序猿的头上,在cocos2d-x中android包默认支持等比例的屏幕缩放,具体实现方式,在jni/helloworld/main.cpp中增加如下代码即可。继续拿Hello

完美主义情况下androID自适屏,最好的方式当然是做多套不同分辨率屏幕大小的图片资源,但是一般作为我们这样的小团队开发,不会去花费太多的时间去做多套不同的资源,能给你多做几个封面就不错了,所以这个重任又从美术的头上落到我们程序猿的头上,在cocos2d-x中androID包默认支持等比例的屏幕缩放,具体实现方式,在jni/helloworld/main.cpp中增加如下代码即可。继续拿HelloWorld开刀!

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 voID Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit ( jnienv * env , jobject thiz jint w h ) { if ( ! cocos2d :: CCDirector :: sharedDirector ( ) -> getopenGLVIEw ) ) { CCEGLVIEw * vIEw = &cocos2d CCEGLVIEw sharedOpenGLVIEw ; vIEw setFrameWIDthAndHeight ; // if you want to run in WVGA with HVGA resource,set it // vIEw->create(480,320);Please change it to (320,480) if you're in portrait mode. create ( 480 320 ; // 增加此句即可,480*320是你的游戏标准大小 setopenGLVIEw vIEw ; AppDelegate pAppDelegate new AppDelegate ; CCApplication sharedApplication . run ; } else { CCTextureCache reloadAllTextures ; setGLDefaultValues ; } }

等比缩放效果图:

这样游戏就已经等比缩放了,不过在大部分androID手机上会有黑边,虽然我个人比较喜欢这种方式,因为等比缩放游戏画面不会变形,但是通常情况下我说是没用的,策划说要全屏的,测试说要全屏的,我说让美术做个图,美术说要约会,没时间加班,好吧。又成了程序员的事了。

上面说过cocos2d-x默认支持等比例缩放,从源代码可以看出来,这些源代码在cocos2dx/platform/androID下面,在CCEGLVIEw_androID.cpp中

18 19 20 21 ( int wIDth height ) { wIDth == 0 || height 0 ) { return ; } m_sSizeInPoint . ; ; @H_404_335@// calculate the factor and the rect of vIEwport // 这里取宽高需要缩放比例中小的那个作为等比缩放的比例,可以保证画面完全显示,但是会有黑边 @H_404_335@// !!!需要修改的地方就是这里!!! m_fScreenScaleFactor MIN float ) m_sSizeInPixel / ; vIEwPortW int m_fScreenScaleFactor ; vIEwPortH ; m_rcVIEwPort origin x - vIEwPortW ) 2 ; y vIEwPortH ; size ; ; m_bNotHVGA true ;

在CCEGLVIEw_androID中增加宽高不同的缩放参数,并使用这两个参数来对画面进行不等比缩放

CCEGLVIEw_androID.h中增加

8 9 float getScreenScaleFactor ; // Hxs add for non uniform scale. 2013/05/15 getScreenScaleFactorX ; getScreenScaleFactorY ; /*********************/ // 原本只有一个缩放参数,等比缩放会有黑边
// Hxs add for non uniform scale. 2013/05/15 m_fScreenScaleFactorX // X,Y方向的缩放参数 m_fScreenScaleFactorY ;

CCEGLVIEw_androID.cpp中

20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 #define NON_UNIFORM_SCALE 1 // 不等比缩放开关 宏定义 /* 修改create(int wIDth,int height) / CCEGLVIEw::setVIEwPortInPoints(float x,float y,float w,float h) / CCEGLVIEw::setScissorInPoints(float x,float h)方法中关于缩放的处理 */ ) { ) { ; } ; ; @H_404_335@// calculate the factor and the rect of vIEwport ; #if NON_UNIFORM_SCALE m_fScreenScaleFactorX @H_404_335@// 分别得到X,Y的缩放参数 m_fScreenScaleFactorY ; #else // 等比例缩放 ; #endif ; ; ; ; ; ; ; } setVIEwPortInPoints x y ) { m_bNotHVGA ) { factorX CC_CONTENT_SCALE_FACTOR ; factorY ; glVIEwport Glint factorX + w ; } else { ; } } setScissorInPoints ) { ) { ; ; glScissor } else { ; } /* 增加getScreenScaleFactorX/getScreenScaleFactorY的实现 */ ) { return ; } ) { ; 到此为止,画面上的缩放已经完成啦,但是缩放后触摸的位置还需要修正,继续修改cocos2dx/platform/androID/jni/touchesJni.cpp中关于触摸的缩放,此文件中有多处需要修改的敌方,但是修改方式都一样。以Java_org_cocos2dx_lib_Cocos2dxRenderer_nativetouchesBegin为例

24 Java_org_cocos2dx_lib_Cocos2dxRenderer_nativetouchesBegin jint ID jfloat ) {
CCRect rcRect getVIEwPort ; //float fScreenScaleFactor = CCEGLVIEw::sharedOpenGLVIEw().getScreenScaleFactor(); fScreenScaleFactorX ; fScreenScaleFactorY ; CCSet set ; CCtouch ptouch s_ptouches [ ] ; ! ptouch ) { LOGD ( "Beginning touches with ID: %d,x=%f,y=%f" ; CCtouch @H_404_335@//ptouch->SettouchInfo(0,(x - rcRect.origin.x) / fScreenScaleFactor,(y - rcRect.origin.y) / fScreenScaleFactor,ID); // 分别对x 和 y进行缩放 ptouch SettouchInfo rcRect fScreenScaleFactorX fScreenScaleFactorY ; ] ; addobject ; getDelegate touchesBegan &set NulL ; else { "Beginnig touches with ID: %d error" ; } } 总结

以上是内存溢出为你收集整理的Cocosd-x屏比全部内容,希望文章能够帮你解决Cocosd-x屏比所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1043702.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存