一.动态加载资源

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. 去哪儿网消息队列设计与实现
  2. 解决×××无法上网的心得
  3. windows服务器部署jar包
  4. 本地开发时连接后台数据库时出现的错误,附自救方法
  5. 一款粉笔最近火了 世界各国数学家为什么集体囤粉笔
  6. python 开源框架学习
  7. tomcat 之 tomcat实例配置
  8. 蓝桥杯 ADV-222 算法提高 7-2求arccos值
  9. Ubuntu 16.04之标题栏实时显示上下行网速、CPU及内存使用率
  10. Linux 给用户 赋某个文件夹操作的权限
  11. Android Studio 常用快捷键
  12. Git 笔记:廖雪峰Git 教程总结
  13. 使用Axure RP原型设计实践03,制作一个登录界面的原型
  14. 对微信公众号文章爬取进行分析
  15. vc 判断哪个按键 被按下 消息 按键 状态
  16. echarts 官网访问慢
  17. javaweb基于JSP开发辛馨墙衣壁纸企业官网宣传网站系统+全套文档+PPT 毕业设计 课程设计 大作业源码
  18. PHP+MySQL导出大量数据(Iterator yield)
  19. 手机bootstrap搜索框_这些桌面小部件,Android 手机可不能错过
  20. 腾讯企业邮信任此计算机,讲述qq企业邮箱启用微信动态密码的方法

热门文章

  1. Linux系统升级sudo版本来解决本地用户获得 root 权限
  2. <学习笔记> VBA_Line list_01
  3. android升级到androidx
  4. sap查询所有事物代码
  5. DA1458x使用之第一篇——GPIO
  6. C#图解教程(第三章)
  7. vNext中ABP的Exception的Http中的Status Code
  8. Jenkins教程(4)使用PyInstaller构建Python应用
  9. 2018年9月CSP CCF认证考试 经验
  10. Jquery-获取子元素children,find