适配屏幕的技巧

多屏幕分辨率可真是开发者的死对头啊!常言道:你若屏幕分辨多,我就自挂东南枝~

不过对于游戏开发而言,一旦理解了适配屏幕的原理,便可无敌于众多的屏幕分辨率了。

在开始游戏开发时,我们预设一个“原始屏幕“,在原始屏幕上绘制各种游戏元素;

当实际将游戏部署到不同分辨率的设备上时,再将“原始屏幕”绘(ying)制(she)到实际屏幕上去。

在映射到实际屏幕的过程中,如果“实际屏幕”的长宽比和“原始屏幕”的不同,就要考虑如何调整进行适配。

比如“原始屏幕”是这样:

最懒的方案是,将“原始屏幕”直接忽略原始比例,按照实际屏幕的比例进行缩放,将“原始屏幕”变形但是完整地绘制到设备屏幕上。这种偷懒方式会影响一般玩家的游戏体验,不推荐使用。

比较省事又有效果的方案是,将“原始屏幕”按原始比例缩放到实际设备刚好能完全显示的大小,然后居中绘制到设备屏幕上,此时有可能因为“原始屏幕”在映射过程中与“实际屏幕”存在空隙(用黑色填充)。

似乎看上去第二种方案已经很有效了,但是对于强(chu)迫(nv)症(zuo)玩家来说,屏幕上突出的黑边是无法容忍的。

那么比较推荐的方案是第三种——将“原始屏幕”按原始比例缩放到能够完整填充满整个设备屏幕(虽然有部分内容会因为超出屏幕而不能展现给玩家)。也就是说,使用不同设备的玩家在进行同一个游戏的时候看到的画面内容会有所区别。(例如下图中左数图3,图4)

如何设置三种屏幕映射的具体内容参见博客SpriteKit游戏开发点滴(3) 屏幕大小模式

      

如果选择第三种方案来对不同屏幕进行适配,我们就需要注意一个问题——游戏的有效区域。因为持有瘦长设备(iPhone5/5S)的玩家能够看见的游戏区域比持有宽胖设备(iPad/iPhone4/4S)的区域小,所以游戏的有效区域应该是所有设备的玩家所能见到的最小的游戏区域。所以只要制作的时候注意将游戏元素放置在有效区域(限制玩家的操作在有效区域内)即可。

对于苹果的设备而言:

我们应该以最宽胖的比例(2048*1536)为“原始屏幕”,而以最瘦长的比例(2048*1152)为“有效区域”来进行适配。(也就是说,应该保证原始屏幕边界的192((1536-1152)/2)像素内是操作无效的)

具体的实现代码很简单:在GameViewController.swift中:(注意,竖直的屏幕是1536*2048,水平的屏幕是2048*1536)

class GameViewController: UIViewController {override func viewDidLoad() {super.viewDidLoad()let scene = GameScene(size:CGSize(width: 1536, height: 2048))let skView = self.view as SKViewscene.scaleMode = .AspectFill        skView.presentScene(scene)}
}

计算游戏有效区域的方法:

        func initPlayableRect(){let tempWidth = size.height / 16.0 * 9.0let tempMargin = (size.width - tempWidth) / 2playableRect = CGRect(x: tempMargin, y: 0, width: tempWidth, height: size.height)}

下面是这两天自己正在写的小游戏,红线部分是游戏有效区域,这是三种不同分辨率的屏幕适配结果:

     

以上

SpriteKit游戏开发点滴[4] 适配屏幕的技巧相关推荐

  1. 游戏开发29课 cocoscreator 多分辨率适配方案

    多分辨率适配方案 Cocos Creator 3.0 在整体设计上沿用了 Cocos Creator 2.x 一套资源适配多种分辨率屏幕的方案.简单概括来说,我们通过以下几个部分完成多分辨率适配解决方 ...

  2. SpriteKit游戏开发适配iPad/iPhone6/7/8/Plus及iPhoneX的尺寸及安全区域

    未适配前:Ball球超过屏幕的上下方 适配后:Ball球就在屏幕的可视范围内运动了 一.那么如何适配不同的iPhone.iPhoneX及iPad的屏幕尺寸呢? 我们开发一个App的时候, 通常希望它在 ...

  3. 【不定期更新】游戏开发中的一些良好习惯与技术技巧

    平时programing时想到和积累的一些小技巧,在这里写成一篇日志,欢迎拍砖. <技巧一> 使用二进制位移运算来进行乘数是2的幂的简单整数乘法(除法),因为所有的数据在计算机中都是以二进 ...

  4. [转载]kindle屏幕出现小黑点,怎么办?

    kindle屏幕出现小黑点,怎么办呢?请看下面官方给出的标准解决kindle屏幕出现小黑点的方法: 您好,抱歉给您带来不便,您可以先擦拭一下屏幕,排除是否是异物.如果擦拭后,仍有黑点.您可以将屏幕图片 ...

  5. IOS仿[自选股]项目开发

    [自选股]手机客户端致力于通过先进的移动互联技术,让广大投资者尊享更便捷的证券投资服务.其简约易用 功能特点 一:界面简洁 登录人性化 用户可通过QQ账户登录软件,无需注册登录.登录后,软件会自动同步 ...

  6. [3D游戏开发实践] Cocos Cyberpunk 源码解读-高中低端机性能适配策略

    Cocos Cyberpunk 是 Cocos 引擎官方团队以展示引擎重度 3D 游戏制作能力,提升社区学习动力而推出的完整开源 TPS 3D游戏,支持 Web, IOS, Android 多端发布. ...

  7. 【iOS-Cocos2d游戏开发】系列(总结了多篇文章,可以好好学习

    最近几天仔细了解了iOS游戏开发引擎,常用的cocos2d,Unity引擎,那么Unity是非免费的,而cocos2d则是免费开源的: 最后促使我选择cocos2d的原因有两点: 1.最重要的原因是它 ...

  8. 收藏一篇访谈并做笔记:《[独家]与周鸿祎谈乔布斯》

    五点第一觉醒来,看到Apple4us上的一篇访谈<[独家]与周鸿祎谈乔布斯>,通读下来,甚是喜欢.周鸿祎的每一个回答我都非常认同,也想到了一些自己正在做的事,错误与正确.同时,这让我对周鸿 ...

  9. [翻译]Why Functional Programming Matters

    Why Functional Programming Matters 函数式程序设计为什么至关重要 作者: John Hughes 翻译: CloudiDust [http://blog.csdn.n ...

最新文章

  1. 2018年最后几天学什么?给你关注度最高的10篇文章
  2. App Store上微信的评论地址
  3. 解释:什么是云计算?
  4. Graph Theory Class(Min25求1~n质数和)
  5. 为了杀蚊子,他用树莓派DIY了一把激光枪!
  6. oracle recover redo,oracle redo log日志(当前或非当前日志)损坏之后的db恢复
  7. 初识 JAVA IO
  8. SQLServer之深度分析Insert
  9. HTC vive手柄在三维空间画线
  10. 利用ADS 2019软件Designguide自动设计滤波器
  11. js定义对象时属性名是否加引号问题
  12. 计算机应用专业毕业设计模板,计算机应用毕业论文模板范文
  13. 刺激战场微信登录更换服务器,刺激战场怎么换微信号登陆 切换微信账号登陆方法...
  14. 论文笔记:Connectionist Temporal Classification: Labelling Unsegmented Sequence
  15. load initialize
  16. wifi无线认证,802.1x认证上网方式详解
  17. 电子元器件:三极管参数笔记(持续记录)
  18. HTML5期末大作业:运动系列——NBA篮球主题学生网页设计(7个页面) HTML+CSS+JavaScript 体育网页设计HTML代码 学生网页课程设计期末作业下载 大学生网页设计制作成
  19. 发送邮件sendEmailUtil
  20. 比正则快M倍以上!Python替换字符串的新姿势

热门文章

  1. 谷歌这是玩的哪一手?谷歌确实慌了,也确实怕了
  2. 爱普生Epson SureColor T5280MFP 打印机驱动
  3. IRubberBand接口(橡皮条绘制点、线、面)
  4. IT的学习部落(持续更新)
  5. 【Android开发】使用DDMS巧妙进行手机屏幕录制
  6. 如果你的男朋友是名DJ
  7. 磁珠Ferrite Bead 与电感inductance 的区别
  8. UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xcf in position 14: invalid continuation byte
  9. spring boot项目生成docker镜像并完成容器部署
  10. part time job c语言,面试英语:打工经验Part-time Job篇