这是针对ipad上显示iphone游戏展开的研究,比较冷门
- 上次写的有点蠢了,ipad iphone分辨率虽然机型没有几款,但是他们有正常和缩放(zoomed)模式,导致分辨率其实很难判断。其实适配ipad上的iphone很简单,因为ipad对应的iphone分辨率其实是对应的 [UIScreen mainScreen].bounds.size; 这个绘制区域,以及[[UIScreen mainScreen] scale] 缩放倍率来决定的。
- 如果像我一样要适配老款游戏对应不同倍率适配不同的ccb文件,其实要对scale进行判断的。一种方法是对不同倍率的ccb采用相同资源进行处理,另一种是对同一套ccb,进行不同倍率的资源适配,第二种显然会将误差放大。
typedef enum {
ScreenType_NONE=0,
// ScreenType_iPhone3gs=1<<0,
ScreenType_iPhone4=1<<1,
ScreenType_iPhone5=1<<2,
ScreenType_iPhone8=1<<3,
ScreenType_iPhone8Plus=1<<4,//6p,7p
ScreenType_iPhone8PlusZoomed=1<<5,//6pzoomed,7pzoome
ScreenType_iPhoneX=1<<6,//ScreenType_iPhoneXS
ScreenType_iPhoneXR=1<<7,
ScreenType_iPhoneXSMax=1<<8,//
// ScreenType_iPadSd=1<<15,
// ScreenType_iPadHd=1<<16,
// ScreenType_iPad9=1<<17,
// ScreenType_iPad10=1<<18,
// ScreenType_iPad12=1<<19,
//// ScreenType_iPad12Zoomed=1<<20,
ScreenType_All = -1,
ScreenType_hasCorner = ScreenType_iPhoneX||ScreenType_iPhoneXSMax,
// ScreenType_isIpad = ScreenType_iPadSd|ScreenType_iPadHd|ScreenType_iPad9|ScreenType_iPad10|ScreenType_iPad12,
// ScreenType_isIphone = ~ScreenType_isIpad,
}ScreenType;
-(ScreenType)screenType{
CGSize boundsSize = [UIScreen mainScreen].bounds.size;
NSInteger scaleFactor = CC_CONTENT_SCALE_FACTOR();
NSLog(@"boundsSize %@ scaleFactor %d",NSStringFromCGSize(boundsSize),(int)scaleFactor);
if(CGSizeEqualToSize(boundsSize, CGSizeMake(320, 480))){
_screenType = ScreenType_iPhone4;
}else if(CGSizeEqualToSize(boundsSize, CGSizeMake(320, 568))){
_screenType = ScreenType_iPhone5;
}else if(CGSizeEqualToSize(boundsSize, CGSizeMake(375, 667))){
if(scaleFactor==3){
_screenType = ScreenType_iPhone8PlusZoomed;
}else {//scaleFactor==2
_screenType = ScreenType_iPhone8;
}
}else if(CGSizeEqualToSize(boundsSize, CGSizeMake(414, 736))){
_screenType = ScreenType_iPhone8Plus;
}else if(CGSizeEqualToSize(boundsSize, CGSizeMake(375, 812))){
_screenType = ScreenType_iPhoneX;
}else if(CGSizeEqualToSize(boundsSize, CGSizeMake(414, 896))){
if(scaleFactor==3){
_screenType = ScreenType_iPhoneXSMax;
}else if(scaleFactor==2){
_screenType = ScreenType_iPhoneXR;
}else{
_screenType = ScreenType_iPhoneXR;
}
// }else if(CGSizeEqualToSize(boundsSize, CGSizeMake(2048, 2732))){
// _screenType = ScreenType_iPad12;
// }else if(CGSizeEqualToSize(boundsSize, CGSizeMake(2048, 2732))){
// _screenType = ScreenType_iPad12;
// }else if(CGSizeEqualToSize(boundsSize, CGSizeMake(1668, 2224))){
// _screenType = ScreenType_iPad10;
// }else if(CGSizeEqualToSize(boundsSize, CGSizeMake(1536, 2048)) && CGSizeEqualToSize(boundsSize,CGSizeMake(375, 667))){
// _screenType = ScreenType_iPad9;
// }else if(CGSizeEqualToSize(boundsSize, CGSizeMake(1536, 2048))){
// _screenType = ScreenType_iPadHd;
// }else if(CGSizeEqualToSize(boundsSize, CGSizeMake(768, 1024))){
// _screenType = ScreenType_iPadSd;
}else{
_screenType = ScreenType_iPhone4;
}
return _screenType;
}
网友评论