写在iPhone6S发布之际!(等着没事干!^^)
曾几何时,Android设备由于类型繁多,屏幕尺寸不统一成为被批评的原因之一,而iOS设备,包括iPhone、iPad、iPod Touch,越来越多的设备类型也出现了不同的屏幕分辨率,为开发者带来了新的挑战。
当然,现在我们可以使用自动布局来处理普通的iOS应用,但SpriteKit可能有些不同;近日研究SpriteKit的开发问题,搞出一些歪招,正所谓:不走寻常路也!^^
实际上,在使用SpriteKit开发iOS游戏时,我们可以只处理三种分辨率:
我们知道, 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,多提宝贵意见!^^