一.动态加载资源

1.静态加载

通过把资源挂载在场景上节点上或者场景节点的组件上

cc.director.load("hallScene")//场景切换的同时加载场景资源

静态加载预制体

@property(cc.Prefab)
mallNode:cc.Prefeb=null;

预加载

cc.director.preloadScene("hallScene")//场景预加载

优点:写代码方便

缺点:切换场景时间长

2.动态加载

主要用于小游戏开发,微信小游戏包体不能超过18m,字节8m,qq8m

异步式加载,用户边玩游戏边加载资源.

动态资源必须放在resouces文件夹下

cc.loader.loadRes//单文件加载

cc.loader.loadResArray//多文件加载

const { ccclass, property } = cc._decorator;@ccclass
export default class sp1 extends cc.Component {start() {//动态加载的文件必须在assets的resources文件夹下//设置动态加载的文件变量为resources下的//prefab子文件夹下的cocoslogo.prefab预制体文件let resFile = "prefab/cocoslogo.prefab"cc.loader.loadRes(resFile, function (err, res) {if (err) {console.log("加载资源失败");return;}console.log("成功加载资源", res);console.log("文件路径", resFile);})}
}

?如何获取文件夹下所有文件名

二.游戏的音乐音效

1.AudioSource组件

2.audioEngine音效引擎

        cc.loader.loadRes("music/table_background_music", function (err, bgmusic) {if (err) {console.log("加载音乐失败");return;}console.log("加载音乐", bgmusic);cc.audioEngine.playMusic(bgmusic, false);//参数1:音乐文件 参数2:是否循环console.log("播放音乐成功");})

三.游戏的本地化数据存储

1.数据设置,读取,删除

//参数一 key 参数二 value
cc.sys.localStorage.setItem('year',18)
cc.sys.localStorage.getItem('year')
cc.sys.localStorage.removeItem('year')

2.数据管理类

①创建DataCfg.ts数据配置文件
//DataCfg.ts
let DataCfg={username:{name:"username",val:"默认用户"},//用户名coin:{neme:"coin",val:0},//玩家金币life: { Name: "life", val: 50 },//玩家生命damage: { Name: "damage", val: 20 },//玩家攻击力magic: { Name: "magic", val: 30 },//玩家魔法
}
export{DataCfg}
②创建DataMgr.ts数据管理类
//DataMgr.ts
import { DataCfg } from "./DataCfg";
const {ccclass, property} = cc._decorator;@ccclass
export default class DataMgr{static DataMgr: any;public dataObj: {username:string,//用户名coin:number,//玩家金币life: number,//玩家生命damage: number,//玩家攻击力magic: number,//玩家魔法}//定义数据对象private static _ins: DataMgr;public init() {this.getDataObjJson();}public static getInstance() {//单实例方法if (!DataMgr._ins) {DataMgr._ins = new DataMgr();}return DataMgr._ins}//设置数据public setDataObjJson() {this.setItem("dataObj", JSON.stringify(this.dataObj))}//获取数据public getDataObjJson() {let value = cc.sys.localStorage.getItem("dataObj");if (value === null || value =="") {value = this.firstInitDta();this.dataObj = value;} else {this.dataObj = JSON.parse(value);}console.log(this.dataObj);//检查残缺值for (const key in DataCfg) {let i = DataCfg[key];if(this.dataObj[key] == null){console.log("+++有残缺值");this.dataObj[i.Name] = JSON.parse(JSON.stringify(i.val));console.log(this.dataObj);this.setDataObjJson();}}}//第一次初始化数据public firstInitDta() {let obj = {};for (const key in DataCfg) {obj[key] = DataCfg[key].val;}// this.dataObj = JSON.parse(JSON.stringify(obj));this.setItem("dataObj", JSON.stringify(obj));return obj;}//设置数据方法public setItem(key, value) {cc.sys.localStorage.setItem(key, value);}//获取数据方法public getItem(key, val) {let value = cc.sys.localStorage.getItem(key);if (value === null) {value = valcc.sys.localStorage.setItem(key, val);}return value;}//删除数据方法public removeItem(key) {cc.sys.localStorage.removeItem(key);}
}
③将loading.ts挂载在主场景Cavans节点下并调用数据管理类
//loading.ts
import DataMgr from "./DataMgr";
const { ccclass, property } = cc._decorator;
@ccclass
export default class loading extends cc.Component {onLoad() {//初始化数据管理类DataMgrDataMgr.getInstance().init();}start() {//调用数据管理类DataMgr获取数据console.log("DataMgr.getInstance().dataObj.coin的值是", DataMgr.getInstance().dataObj.coin);console.log("DataMgr.getInstance().dataObj.damage的值是", DataMgr.getInstance().dataObj.damage);console.log("DataMgr.getInstance().dataObj.life的值是", DataMgr.getInstance().dataObj.life);console.log("DataMgr.getInstance().dataObj.magic的值是", DataMgr.getInstance().dataObj.magic);console.log("DataMgr.getInstance().dataObj的值是", DataMgr.getInstance().dataObj)//调用数据管理类DataMgr写入数据DataMgr.getInstance().dataObj.username="第一个用户"console.log("DataMgr.getInstance().dataObj.username的值是", DataMgr.getInstance().dataObj.username);}
}

四.游戏音效管理类

//单实例音效管理类audioMar.ts
import { audioConfig } from "./audioConfig";
const { ccclass, property } = cc._decorator;
@ccclass
export default class audioMar {private static _ins: audioMar;soundMap = {};//动态加载后的资源对象init() {//初始化单实例//加载音乐音效let self = this;for (const key in audioConfig) {let res = audioConfig[key].path;// console.log("读取音乐配置文件", res, "成功!")cc.loader.loadRes(res, function (err, res) {if (err) {// console.log("动态加载", res, "失败");}self.soundMap[key] = res;// console.log("动态加载", self.soundMap, "成功");})}}//单实例方法static getInstance() {if (!this._ins) {this._ins = new audioMar();}console.log("获取单实例成功!!!");return this._ins;}//播放音乐playMusic(audioClip, loops) {cc.audioEngine.playMusic(this.soundMap[audioClip], loops);// console.log("准备播放",this.soundMap[audioClip],"音乐");}//播放背景音乐playBgMusic(audioClip,loops){cc.audioEngine.playMusic(this.soundMap[audioConfig.bgm1.name],true);console.log("准备播放",this.soundMap[audioConfig.bgm1.name],"的背景音乐");console.log("adioConfig.bgm1.name的值为",audioConfig.bgm1.name);}//播放音效playEffect(audioClip,loops)    {cc.audioEngine.playEffect(this.soundMap[audioClip],true);console.log("准备播放",this.soundMap[audioClip],"音效");}
}
//audioConfig.ts
//音乐配置
//声明成对象
let audioConfig={bgm1:{name:"bgm1",path:"music/bgm1.mp3"},bgm2:{name:"bgm2",path:"music/bgm2.mp3"},btn:{name:"btn",path:"sound/anniudianji.mp3"},bomb:{name:"bomb",path:"sound/bomb.mp3"}
}
export{audioConfig};//导出audioconfig对象
       //loadingTS.ts//初始化音乐管理类audioMar.getInstance().init();//因为audioMar.ts中进行的动态加载为异步加载,所以要提前初始化//否则会出现播放不了音乐的情况,因为播放在加载资源之前//可以通过consol.log加载信息调试查看
//hallTS.ts
//音乐管理类实例化调用//播放背景音乐audioMar.getInstance().playBgMusic("bgm1",true);

五.游戏本地数据管理类

1.DataConfig.ts

//本地游戏数据配置
let DataConfig={userName:{name:"userName",defaultValue:0},coin:{name:"coin",defaultValue:0},lv:{name:"lv",defaultValue:"defaultUser"}
};
export{DataConfig};

2.DataMar.ts

import { DataConfig } from "./DataConfig";//游戏本地数据管理类
export default class DataMar {private static _ins: DataMar;//单实例变量//typescript中的对象数据类型public dataObj: {coin: 0,lv: 0,userName: "defaultUser"}constructor() {//构造方法}init() {//初始化方法cc.sys.localStorage.setItem("coin", 0);cc.sys.localStorage.setItem("lv", 0);cc.sys.localStorage.setItem("userName ", 0);}public static getInstance() {//单实例方法if (!DataMar._ins) {DataMar._ins = new DataMar();}return DataMar._ins;}//set方法public setDataObjJson() {cc.sys.localStorage.setItem("dataObj", JSON.stringify(this.dataObj));}//get方法public getDataObjJson() {let value = cc.sys.localStorage.getItem("dataObj");if (value === null || value == "") {//第一次打开游戏value = this.firstInitDta();this.dataObj = value;}else {//不是第一次打开游戏this.dataObj = JSON.parse(value);}console.log("this.dataObj的值为", this.dataObj);//残缺值检查for (const key in DataConfig) {let i = DataConfig[key];if (this.dataObj[key] == null) {console.log("+++有残缺值");this.dataObj[i.name] = JSON.parse(JSON.stringify(i.defaultValue));console.log("this.dataObj的值为", this.dataObj);this.getDataObjJson();}}}public firstInitDta() {let obj = {};for (const key in DataConfig) {obj[key] = DataConfig[key].defaultValue;}this.setItem("dataObj", JSON.stringify(obj));return obj;}public setItem(key, value) {cc.sys.localStorage.setItem(key, value);}
}

第十三课 斗地主项目课③游戏音乐与音效及本地存储相关推荐

  1. 第十四课 斗地主项目课④ 游戏场景的ui

    一.分析游戏场景的节点树 assets文件夹的scene文件夹下: 游戏场景:gameScene 大厅场景:hallScene 开始场景:loadScene 1.gameScene 2.hallSce ...

  2. 第十一课 斗地主项目课① loading与login游戏场景

    一.局部函数访问全局this 1.通过定义变量方法 //loadScene.ts const { ccclass, property } = cc._decorator; @ccclass expor ...

  3. 棋牌游戏的灵魂—游戏音乐、音效与配音

    棋牌游戏除了画面以外,声音才是灵魂,画面与声音配合,让能让玩家体验一把棋牌游戏的饕鬄盛宴,声音在很大程度上影响着玩家对游戏的体验. 游戏角色配音成为记忆点 在棋牌网络游戏中,声音主要是由三个部分组合而 ...

  4. 游戏音乐及音效的使用(附Demo)

    MC中背景音乐及音效主要通过4个函数来实现:背景音乐(PlayMusic.PlayMusic2).音效(PlaySound.PlaySound2) 这里先简单介绍下音频函数的相关参数: PlayMus ...

  5. 技术答疑丨如何区分游戏短音乐与音效以及配音

    在游戏的声音领域,一般游戏音乐.音效与配音,但是每个类别又有不同的细分,在我们奇亿音乐与游戏厂商的日常沟通中,发现这些问题一直困扰着大家,一起来看看吧. 1.如何区分游戏的音效与配音? 游戏音效也是泛 ...

  6. 游戏厂商必看:游戏音乐验收标准

    在游戏音频外包中,验收是检验游戏音频是否合格的标准.在音频验收的过程中,首先要确认程序部分已经预留好所有音频放入的事件链接,其次要确认音频都做过后期工作,比如响度平衡.让频处理,以到达频率不会严重干扰 ...

  7. 实验楼项目课学习笔记-jQuery翻转拼图游戏

    2019独角兽企业重金招聘Python工程师标准>>> 项目效果图如下: game/index.html <!DOCTYPE html><html><h ...

  8. 【源码+教程】Java课设项目_12款最热最新Java游戏项目_Java游戏开发_Java小游戏_飞翔的小鸟_王者荣耀_超级玛丽_推箱子_黄金矿工_贪吃蛇

    马上就要期末了,同学们课设做的如何了呢?本篇为大家带来了12款热门Java小游戏项目的源码和教程,助力大家顺利迎接暑假![源码+教程]Java课设项目_12款最热最新Java游戏项目_Java游戏开发 ...

  9. 第二十三章《斗地主游戏》第1节:斗地主项目简介

    斗地主游戏是一款3人参与的棋牌游戏,3方用一副牌(54张)展开游戏,其中一方为地主,其余两家为另一方,双方对战,先出完牌的一方获胜.用计算机程序实现的斗地主程序需要3个客户端,每个客户端都代表一个玩家 ...

最新文章

  1. 【mysql的编程专题⑤】自定义函数
  2. 我看过的Python方面的好文章
  3. java--static关键字
  4. 【五线谱】拍号与音符时值 ( 五线谱拍号 | 全音符休止符 | 二分音符休止符 | 四分音符休止符 | 八分音符休止符 | 十六分音符休止符 | 三十二分音符休止符 )
  5. 我的2017年文章汇总——Java及中间件篇
  6. python setup脚本编写
  7. 电脑课装b专用代码_JavaScript无形装X,最为致命
  8. MySQL 之 库操作
  9. 容器技术Docker K8s 51 容器镜像服务(ACR)详解-进阶
  10. Android studio进行文件,代码对比
  11. 大华监控相机RTSP视频流
  12. 电钻有刷好还是无刷好_有刷电机与无刷电机究竟哪个好?看完就知道了!
  13. hibernate两张表关联查询
  14. 第十五天PAT-A1124 Raffle for Weibo Followers简单模拟测试点三错误说明
  15. 英语影视台词---无敌破坏王2大脑互联网(2)(我完全被震惊了)
  16. 我的分形屏保 国王风暴《KingBlizzard》
  17. 极光会客厅:大型H5游戏如何登陆微信小游戏及游戏性能优化分享
  18. 好程序员Python学习路线分享Linux和数据库部分
  19. SWUSTOJ #971 统计利用先序遍历创建的二叉树的深度
  20. 有赞大裁员,竟把人员优化写进 OKR

热门文章

  1. Web自动化测试(二)
  2. Vuex中的Getter的使用
  3. python调用mysql数据_python使用mysql数据库(虫师)
  4. SAP 系统使用技巧汇总
  5. 团队主义时代的商业领袖们
  6. 010 | 古村楹联在道德教育及文学素养培养中的价值及启示 | 大学生创新训练项目申请书 | 极致技术工厂
  7. 宜立方商城—— 购物车增加、删除、修改数量、删除选中商品和清空购物车的实现
  8. 拉格朗日插值代码python实现(不掉包)
  9. 【Linux】四、Linux 进程概念(上篇)
  10. linux find 文件 并打印时间,linux 之 find 命令