随笔分类 -  SpriteKit

摘要:玩家进入GameScene场景中 -> 通过GKStateMachine进入到指定的游戏状态GKState 在GameScene场景中 -> 根据不同的逻辑调用GKStateMachine -> 在各个不同的游戏状态GKState之间进行切换 阅读全文
posted @ 2018-10-11 12:29 布袋 阅读(696) 评论(0) 推荐(0)
摘要:适配Apple的最新三款手机iPhoneXs、iPhoneXs Max及iPhoneXr。2048 * 1536 是iPad Retina 的分辨率。也是我们需要适配的设备里面分辨率最高的。 所以我们在游戏中都选择了这个大小,让它来兼容分辨率低的设备。 在其他设备上就用 AspectFill来进行缩放,并应用相应的屏幕辨率高宽比值Ratio,来适配各个不同的iPhone尺寸。 阅读全文
posted @ 2018-09-26 23:14 布袋 阅读(26814) 评论(2) 推荐(0)
摘要:音乐文件的声音大小有时在做为游戏背景音乐时会过大,而如果我们只是简单应用SKAudioNode来加载音乐的话,是无法进行声音大小的调节的,因此我们必须使用更强大的AVAudioPlayer来进行声音大小的调节。 阅读全文
posted @ 2018-09-17 14:24 布袋 阅读(418) 评论(0) 推荐(0)
摘要:不论是使用哪种平台进行开发,三角学在游戏当中都被广泛的使用,因此,小编iFERO认为,三角学是必须得掌握的技能之一。数学的角度0°度角是X-Axis轴的正方向,而飞船图片上的机头是往Y轴正方向,所以要修正一个90度的弧度,用通俗一点的讲就是数学压根儿不知到你的飞船图片上的机头方向是朝Y轴还是朝哪个见鬼的角度,因为你就是一张图片,所以要修正。 阅读全文
posted @ 2018-09-06 16:59 布袋 阅读(382) 评论(0) 推荐(0)
摘要:我们应用UserDefaults.standard.set方法,分别储存当前分数和最高分数对应的键值forKey:CURRENTSCORE和HIGHSCORE,然后,在游戏结束的场景LoseScene.swift通过UserDefaults.standard.integer(forKey: "CURRENTSCORE")取出存在手机沙盒里的值; 阅读全文
posted @ 2018-08-24 11:21 布袋 阅读(293) 评论(0) 推荐(0)
摘要:游戏是一种很耗费资源的应用,特别是在移动设备中的游戏,性能优化是非常重要的 纹理集是将多张小图合成一张大图,使用纹理集有以下优点: 1、减少内存占用,减少磁盘占用; 2、减少磁盘读取次数,一次性读取一张大图比多次读取多张小图速度更快 一张大图:打开-读取小图-读取小图-读取小图-关闭; 多张小图:打开-关闭,打开-关闭,打开-关闭,打开-关闭; 阅读全文
posted @ 2018-08-21 16:13 布袋 阅读(1331) 评论(0) 推荐(1)
摘要:根据When an overlay node with actions is copied there is currently a SpriteKit bug where the node’s isPaused property might be set to true提示,SpriteKit有一个Bug需要开发者自己来填。 SpriteNode节点在被copy()复制后,会自动被设置为暂停,也就是节点的所有Action全部不可用,如果需要使用node.run(SKAction.run{//code}),得把复制后的节点isPaused设置为false 阅读全文
posted @ 2018-08-04 13:19 布袋 阅读(179) 评论(0) 推荐(0)
摘要:有时候学习如何应用第三方库是非常重要的,因为我们不用再自己重复造轮子,在这里,我们就把原先利用重力感应来操控飞机改为用游戏摇杆joystick来操控,具体的操作如下 阅读全文
posted @ 2018-07-27 13:37 布袋 阅读(733) 评论(0) 推荐(0)
摘要:因为我们须用节点spritenode.copy()把其它Scene(CircleScene.sks)里的节点拷贝一份,并把拷贝的这一份节点加到当前的scene(GameScene.sks)里,还有一个重要的注意点,就是如果要在GameScene.sks取得 Overlay内的红色节点的准确坐标,须用convert把copy到fgNode的节点上的红色节点坐标转为GameScene的坐标(let pos = fgNode.convert(sprite.position, from: sprite.parent!)) 阅读全文
posted @ 2018-07-22 16:59 布袋 阅读(355) 评论(0) 推荐(0)
摘要:Spritekit提供了一个默认的物理模拟系统,用来模拟真实物理世界,可以使得编程者将注意力从力学碰撞和重力模拟的计算中解放出来,通过简单地代码来实现物理碰撞的模拟,而将注意力集中在更需要花费精力的地方。现在,让我们来学习这个系统的使用吧。 阅读全文
posted @ 2018-07-08 20:09 布袋 阅读(781) 评论(0) 推荐(0)
摘要:1、MainScene.sks -- 用户打开APP时一开始看到的画面,等待用户点击"Play"按钮; 2、GameScene.sks -- 游戏进行中的场景画面,用于创建无限循环背景Endless、监测SpriteKit物理碰撞、应用CoreMotion加速计,判断游戏的业务逻辑; 3、LoseScene.sks -- 游戏结束时的场景画面,记录当届分数,记录最高分并应用UserDefaults储存分数在手机沙盒当中,点击"Tap to play"按钮回到GameScene游戏场景画面; 阅读全文
posted @ 2018-07-07 18:29 布袋 阅读(885) 评论(0) 推荐(0)
摘要:如何适配不同的iPhone、iPhoneX及iPad的屏幕尺寸,如何适配不同的iPhone、iPhoneX及iPad的屏幕尺寸呢? 我们开发一个App的时候, 通常希望它在 iPhone, iPad, Mac上同时能运行, 尤其是游戏。 这样就需要我们考虑不同设备不同的分辨率,但处理起来比较麻烦,比如说,按照官方的做法,我们需要提供诸如 ifiero@1x,ifiero@2x,ifiero@3x, 这样不同尺寸的图片,那如何简便的适配设备不同的分辨率呢,我们的做法是, 固定一个大小, 向下兼容不同的设备。 即场景中的所有图片, 都按照屏幕大小为 2048 * 1536 来绘制。 也就是说, 我们的背景图的大小是 2048 * 1536, 其他图片也是依照这个比 阅读全文
posted @ 2018-07-05 21:16 布袋 阅读(694) 评论(0) 推荐(1)
摘要:/// 查找所有命名为ground的精灵节点 enumerateChildNodes(withName: "//ground") { (node, _ ) in /// 如果当前的节点 + scene.size.with < 则移动节点 if node.position.x + self.size.width < camera.position.x { node.position.x += self.size.width * SCENE_NUMBERS /// 更新节点的位置 } } 阅读全文
posted @ 2018-07-03 12:05 布袋 阅读(797) 评论(0) 推荐(0)
摘要:本节主要讲解如何创建无限循环Endless的星空背景(如下图)、玩家飞船发射子弹,监测子弹击外星敌机的SpriteKit物理碰撞并消灭敌机,以及应用iOS的CoreMotion加速计移动飞船躲避外星敌机(加速计须用真机测试)。 阅读全文
posted @ 2018-07-02 15:13 布袋 阅读(535) 评论(0) 推荐(0)
摘要:Spritekit提供了一个默认的物理模拟系统,用来模拟真实物理世界,可以使得编程者将注意力从力学碰撞和重力模拟的计算中解放出来,通过简单地代码来实现物理碰撞的模拟,而将注意力集中在更需要花费精力的地方。现在,让我们来学习这个系统的使用吧。 首先需要认识两个类,一个是场景scene的属性类SKPhysicsWorld,这个类基于场景,只能被修改但是不能被创建,这个类负责提供重力和检查碰撞(碰撞需要实现SKPhysicsContactDelegate代理协议),另一个就是SKPhysicsBody类,你可以对你的SKNode节点添加物理体属性,来让他们可以参与物理模拟的相关计算。 阅读全文
posted @ 2018-07-02 15:10 布袋 阅读(1545) 评论(0) 推荐(2)