写在iPhone6S发布之际!(等着没事干!^^)

曾几何时,Android设备由于类型繁多,屏幕尺寸不统一成为被批评的原因之一,而iOS设备,包括iPhone、iPad、iPod Touch,越来越多的设备类型也出现了不同的屏幕分辨率,为开发者带来了新的挑战。

当然,现在我们可以使用自动布局来处理普通的iOS应用,但SpriteKit可能有些不同;近日研究SpriteKit的开发问题,搞出一些歪招,正所谓:不走寻常路也!^^

实际上,在使用SpriteKit开发iOS游戏时,我们可以只处理三种分辨率:

  • iPhone4S及更早的iPhone设备。
  • iPhone5及更新的iPhone设备及相应的iPod Touch。
  • iPad设备。

我们知道, iOS设备虽然标识的分辨率越来越高,但实际上,像素并没有变化,而是每个像素的“点”数在提高;这样一来,在SpriteKit开发过程中,我们可以只处理像素,问题就简单多了。

首先,我们需要几个变量保存相关的数据,如下面的代码:

#define IPHONE4 1
#define IPHONE5 2
#define IPAD 3

int deviceType;
int screenWidth;
int screenHeight;

然后,我们通过如下面代码获取设备的尺寸和类型:

CGSize size = [[UIScreen mainScreen] bounds].size;
screenWidth = size.width;
screenHeight = size.height;
if (screenWidth == 480 || screenHeight == 480) {
        deviceType = IPHONE4;
}else if (screenWidth == 1024 || screenHeight == 1024){
        deviceType = IPAD;
}else{
        deviceType = IPHONE5;
}

对于代码中的魔数(如480和1024)请不要提意见,这只是针对特殊设备分辨率所做的假设,如,480只存在于iPhone4S及更早的iPhone设备中(3:2的屏幕,480*320像素),而1024则是iPad的尺寸(4:3的屏幕,1024*768像素,不知道iPad Pro会不会保持这个传统?),其它的尺寸,只当作是16:9(568*320像素)的屏幕了。

上面的代码,可以帮助我们在SpriteKit中有效的处理已存在的iOS设备类型和分辨率问题,而且,只需要处理三种情况。

当然,在初始化场景时,需要做出相应的尺寸设置,如下面的代码:

SKView * skView = (SKView *)self.view;
PlayScene *scene = [[PlayScene alloc]initWithSize:CGSizeMake(screenWidth, screenHeight)];
scene.scaleMode = SKSceneScaleModeAspectFill;
[skView presentScene:scene];

闲着没事写着玩,欢迎高手来踩!^^

PS. 如果你喜欢俄罗斯方块游戏,可以玩玩Element Blocks Free或Element Blocks,多提宝贵意见!^^