cocod2d 兼容iphone/ipad 问题
2013-05-10 15:55
344 查看
在iOS开发中要兼容iphone/ipad,把Devices 设置成Universal就能自动适配iphone/ipad,这个比较简单,难点是素材的适配问题。素材适配有两个问题:素材位置、素材大小
1、素材位置问题
关于位置有两种方式:绝对位置和相对位置。如下所示:
绝对位置:ccp(48,32);
相对位置:ccp(size.width*10%,size.height*10%);
比如说当前设备大小为480*320,那么这两个位置相等,如果设备大小为960*640,那么就对位置的素材就会发生偏移,而相对位置就等于ccp(96,64),不管设备大小怎么变它始终在屏幕的(10%,10%)的位置。显然要适配不同的设备我们就需要使用相对位置。
2、素材的大小问题
关于素材的大小问题有两种解决方式:一种是多套素材分别适应不同的设备,一种是一套素材适应多个设备
1、多套素材分别适应不同的设备
在我们的iOS开发中根据不同的设备类型,会加载不同后缀名称的素材图片,默认情况下:iphone/iphone Retina(高清模式)、ipad/ipad Ratina,它们对应的素材名称分别为:Name/Name-hd、Name-ipad/Name-ipadhd
这是默认情况下的,我们也可以自己设定其后缀名称,新建一个项目,打开AppDelegate.m找到如下代码:
CCFileUtils *sharedFileUtils = [CCFileUtils
sharedFileUtils];
[sharedFileUtils
setEnableFallbackSuffixes:NO];
// Default: NO. No fallback suffixes are going to be used
[sharedFileUtils
setiPhoneRetinaDisplaySuffix:@"-hd"];
// Default on iPhone RetinaDisplay is "-hd"
[sharedFileUtils
setiPadSuffix:@"-ipad"];
// Default on iPad is "ipad"
[sharedFileUtils
setiPadRetinaDisplaySuffix:@"-ipadhd"];
// Default on iPad RetinaDisplay is "-ipadhd"
在这你可以设置相应素材的后缀名称。
2、一套素材适应多个设备
在某些情况下我们需要使用一套素材来适配多个设备,那么我们就需要对图片进行成比例放缩,来适应不同的设备:
CGSize size;
size.width =
480;
size.height =
320;
CGSize newsize = [[CCDirector
sharedDirector] winSize];
float sp_scaleX = newsize.width / size.width;
float sp_scaleY = newsize.height / size.height;
CCSprite* sprite = [CCSprite
spriteWithFile:@"Icon.png"];
sprite.scaleX = sp_scaleX;
sprite.scaleY = sp_scaleY;
上面的代码首先设定了原比例大小为size,然后获取当前屏幕大小newsize,然后分别计算出x、y的比例sp_scaleX、sp_scaleY,最后赋值给素材的scaleX、scaleY。
下面说一下如何获取设备类型:
我们使用宏UI_USER_INTERFACE_IDIOM()来获取设备类型,如下:
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
//iphone
}
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
//ipad
}
1、素材位置问题
关于位置有两种方式:绝对位置和相对位置。如下所示:
绝对位置:ccp(48,32);
相对位置:ccp(size.width*10%,size.height*10%);
比如说当前设备大小为480*320,那么这两个位置相等,如果设备大小为960*640,那么就对位置的素材就会发生偏移,而相对位置就等于ccp(96,64),不管设备大小怎么变它始终在屏幕的(10%,10%)的位置。显然要适配不同的设备我们就需要使用相对位置。
2、素材的大小问题
关于素材的大小问题有两种解决方式:一种是多套素材分别适应不同的设备,一种是一套素材适应多个设备
1、多套素材分别适应不同的设备
在我们的iOS开发中根据不同的设备类型,会加载不同后缀名称的素材图片,默认情况下:iphone/iphone Retina(高清模式)、ipad/ipad Ratina,它们对应的素材名称分别为:Name/Name-hd、Name-ipad/Name-ipadhd
这是默认情况下的,我们也可以自己设定其后缀名称,新建一个项目,打开AppDelegate.m找到如下代码:
CCFileUtils *sharedFileUtils = [CCFileUtils
sharedFileUtils];
[sharedFileUtils
setEnableFallbackSuffixes:NO];
// Default: NO. No fallback suffixes are going to be used
[sharedFileUtils
setiPhoneRetinaDisplaySuffix:@"-hd"];
// Default on iPhone RetinaDisplay is "-hd"
[sharedFileUtils
setiPadSuffix:@"-ipad"];
// Default on iPad is "ipad"
[sharedFileUtils
setiPadRetinaDisplaySuffix:@"-ipadhd"];
// Default on iPad RetinaDisplay is "-ipadhd"
在这你可以设置相应素材的后缀名称。
2、一套素材适应多个设备
在某些情况下我们需要使用一套素材来适配多个设备,那么我们就需要对图片进行成比例放缩,来适应不同的设备:
CGSize size;
size.width =
480;
size.height =
320;
CGSize newsize = [[CCDirector
sharedDirector] winSize];
float sp_scaleX = newsize.width / size.width;
float sp_scaleY = newsize.height / size.height;
CCSprite* sprite = [CCSprite
spriteWithFile:@"Icon.png"];
sprite.scaleX = sp_scaleX;
sprite.scaleY = sp_scaleY;
上面的代码首先设定了原比例大小为size,然后获取当前屏幕大小newsize,然后分别计算出x、y的比例sp_scaleX、sp_scaleY,最后赋值给素材的scaleX、scaleY。
下面说一下如何获取设备类型:
我们使用宏UI_USER_INTERFACE_IDIOM()来获取设备类型,如下:
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
//iphone
}
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
//ipad
}
相关文章推荐
- cocod2d 兼容iphone/ipad 问题
- cocos2d-iphone中兼容iphone/ipad的问题
- daily news新闻阅读客户端应用源码(兼容iPhone和iPad)
- Q12:app在iPhone上运行正常,iPad上出现黑边问题解决方案
- 处理iPhone 6s plus/iPad 横屏启动App界面布局错乱问题
- iphone, iphone4, ipad 图标和背景图片问题
- [原创]解决jQuery.live在mobile safari(iphone / ipad / ipod)绑定失败的问题
- ios hover problem【iphone和ipad hover态不消失问题】
- Snow Leopard升级到 10.6.8后无法USB连接iPhone / iPad的问题
- JS IOS/iPhone的Safari浏览器不兼容Javascript中的Date()问题如何解决
- 解决jQuery.live在mobile safari(iphone / ipad / ipod)绑定失败的问题
- iPhone/iPad安装软件出现桌面白图标的问题解决方案
- iPhone/iPad键盘弹出遮挡要编辑内容问题
- border-radius兼容iPhone的问题
- Ipad/Iphone键盘输入慢、切换数字键盘慢的问题-iOS
- iphone&ipad编译 gcc问题
- 关于iPhone和iPad的图标设置问题
- iPhone、iPad默认按钮样式问题
- daily news新闻阅读客户端应用源码(兼容iPhone和iPad)
- (iPhone/iPad开发)解决CAStreamBasicDescription在项目中无法编译通过问题