惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 三生石上(FineUI控件)
Blog — PlanetScale
Blog — PlanetScale
B
Blog
GbyAI
GbyAI
爱范儿
爱范儿
月光博客
月光博客
N
Netflix TechBlog - Medium
T
Tailwind CSS Blog
G
Google Developers Blog
大猫的无限游戏
大猫的无限游戏
Vercel News
Vercel News
H
Hackread – Cybersecurity News, Data Breaches, AI and More
WordPress大学
WordPress大学
The GitHub Blog
The GitHub Blog
Recent Announcements
Recent Announcements
腾讯CDC
MyScale Blog
MyScale Blog
V
Visual Studio Blog
The Cloudflare Blog
Microsoft Security Blog
Microsoft Security Blog
A
About on SuperTechFans
Google DeepMind News
Google DeepMind News
Last Week in AI
Last Week in AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻

博客园 - 布袋

Phaser游戏框架与HTML Dom元素之间的通信交互 Phaser Matter Collision Plugin 碰撞插件 -- iFiero技术分享 Phaser3跟随自定义路径移动的赛车 -- iFIERO游戏教程 用EC5/EC6自定义class的区别及用法 -- Phaser3网页游戏框架 Phaser3让超级玛丽实现轻跳、高跳及加上对应的跳跃声音 PHASER3 设置场景SCENE SLEEPING休眠和WAKE唤醒 Phaser3游戏三角学应用--一只跟随屏幕点击位置游动的鱼 Phaser3 对象池随机产生炸弹并销毁 Phaser3 场景Scene之间的传值 -- HTML JAVASCRIPT 网页游戏开发 Phaser3 屏幕适配iPhoneX、iPhoneXs的坑 -- JavaScript Html5 游戏开发 GameplayKit的GKStateMachine用法与实例 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域 Swift使用AVAudioPlayer来调节游戏的背景音乐大小 学好三角学(函数) — SWIFT和JAVASCRIPT游戏开发的必备技能 iFIERO.com 一步一步图文介绍SpriteKit使用TexturePacker导出的纹理集Altas SpriteKit在复制节点时留了一个巨坑给开发者,需要开发者手动把复制节点的isPaused设置为false 运用GamePlayKit的GKEntity及GKComponent 的iOS游戏开发实例 SpriteKit手机游戏摇杆JoyStick的使用 -- by iFIERO游戏开发教程 SpirteKit深度复制SKSpriteNode节点及convert转换其它Scene上的节点到当前场景坐标
应用UserDefaults储存游戏分数和最高分
布袋 · 2018-08-24 · via 博客园 - 布袋

应用UserDefaults储存游戏分数和最高分

我们在GameScene.swift里

 private var currentScore:SKLabelNode! // 当前分数节点
 private var cScore:Int = 0  

在子弹击中外星人时记录分数
func bulletHitAlien(nodeA:SKSpriteNode,nodeB:SKSpriteNode){}

func bulletHitAlien(nodeA:SKSpriteNode,nodeB:SKSpriteNode){

  // 分数统计
        cScore += 1
        currentScore.text = "SCORE:\(cScore)"
        

我们应用UserDefaults.standard.set方法,分别储存当前分数和最高分数对应的键值forKey:CURRENTSCORE和HIGHSCORE,然后,在游戏结束的场景LoseScene.swift通过UserDefaults.standard.integer(forKey: "CURRENTSCORE")取出存在手机沙盒里的值;

currentScore.text = "SCORE:\(UserDefaults.standard.integer(forKey: "CURRENTSCORE"))"   // 取出当前分数
 highScore.text    = "HIGH SCORE:\(UserDefaults.standard.integer(forKey: "HIGHSCORE"))" 

取出沙盒中的分数,并分别把当前分数、最高分数显示在LoseScene场景当中

取出沙盒中的分数,并分别把当前分数、最高分数显示在LoseScene场景当中

代码如下:

 private var currentScore:SKLabelNode! // 当局分数
 private var highScore:SKLabelNode!    

我们补充一下有关Swift数据储存方式的相关知识,数据储存是存在iOS沙盒的当中,沙盒,顾名思义,即各个app之间是无法互相访问数据的,其目录结构为:

每个应用程序都有对应的私有目录,其根目录为Home目录。该目录下又三个文件夹:Documents、Library、tmp

每个应用程序都有对应的私有目录,其根目录为Home目录。该目录下又三个文件夹:Documents、Library、tmp

UserDefaults的存放位置

UserDefaults的存放位置

每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离。应用必须待在自己的沙盒里,其他应用不能访问该沙盒。沙盒下的目录如下:

Documents: 保存应⽤运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录。例如,游戏应用可将游戏存档保存在该目录。

tmp: 保存应⽤运行时所需的临时数据,使⽤完毕后再将相应的文件从该目录删除。应用 没有运行时,系统也可能会清除该目录下的文件。iTunes同步设备时不会备份该目录。

Library/Caches: 保存应用运行时⽣成的需要持久化的数据,iTunes同步设备时不会备份 该目录。⼀一般存储体积大、不需要备份的非重要数据,比如网络数据缓存存储到Caches下。

Library/Preference: 保存应用的所有偏好设置,如iOS的Settings(设置) 应⽤会在该目录中查找应⽤的设置信息。iTunes同步设备时会备份该目录。

UserDefaults可以存储的数据类型:NSData、NSString、NSNumber、NSDate、NSArray、NSDictionary,如果把有null的value放入userDefaults,程序会崩。

//存储基础类型,以Int为例。
UserDefaults.standard.set(15, forKey:"theKey")

注意:不要用UserDefaults储存用户的密码。

补充单例实现存取UserDefaults方法:

//
//  GameHelper.swift
//  SpaceBattle

//  Copyright © 2018 iFiero. All rights reserved.

单例实现存取UserDefaults方法的源码传送门:http://www.iFIERO.com/uploads/SpaceBattle_Score.zip