CocosCreator3.0版本是真正的3D项目集成版本。其中有很大的版本改动,例如:

一、文件布局

package文件夹改成extensions文件夹;

具体查看 https://docs.cocos.com/creator/3.0/manual/zh/editor/publish/custom-build-plugin.html 。

增加build-templates文件夹,该文件夹对于构建自定义项目很有帮助

具体查看 https://docs.cocos.com/creator/3.0/manual/zh/editor/publish/custom-project-build-template.html 。

增加profiles文件夹,该文件夹包含项目配置信息、场景配置信息等;

具体查看 https://docs.cocos.com/creator/3.0/manual/zh/editor/extension/profile.html?h=profiles 。

二、脚本的API

1.cc的移除

之前:没有了cc的命名空间,如之前的CCClass的属性定义是

3.0:移除了cc的前缀

三、开放数据域的编写

之前:我们需要创建一个CocosCreator项目,然后在编译的时候,选择“开放数据域”的项目类型即可。如图:

3.0:我们需要在构建的时候选择"生成开放数据域工程模板",如图:

然后再像写web前端那样,编辑开放数据域项目

具体的开放数据域目录大概像这样

开放数据域的具体的开发流程可参考:https://docs.cocos.com/creator/3.0/manual/zh/editor/publish/build-open-data-context.html 。

四、可以实现Prefab的嵌套

五、音频播放

之前:

// Learn TypeScript:
//  - https://docs.cocos.com/creator/manual/en/scripting/typescript.html
// Learn Attribute:
//  - https://docs.cocos.com/creator/manual/en/scripting/reference/attributes.html
// Learn life-cycle callbacks:
//  - https://docs.cocos.com/creator/manual/en/scripting/life-cycle-callbacks.htmlconst { ccclass, property } = cc._decorator;@ccclass
export class AudioMgr {static musicVolume: number = 1.0;static roleVolume: number = 1.0;static effectVolume: number = 1.0;static curPlayEffectId: number = 0;static init() {this.initVolumes();this.setMusicVolume(this.musicVolume, false);}static playMusic(audio: AudioType, loop: boolean = false) {cc.resources.load("mp3/" + audio, cc.AudioClip, (err, clip: cc.AudioClip) => {if (err) {console.error("playMusic", err);return;}cc.audioEngine.playMusic(clip, loop);});}// 播放普通音效 / 角色音效static playEffect(audio: AudioType | string, type: VolumeType = VolumeType.OTHER, loop: boolean = false, cb?: (audioId: number) => void) {cc.audioEngine.setEffectsVolume(type === VolumeType.OTHER ? this.effectVolume : this.roleVolume);this._playEffect(audio, loop, cb);}// 播放普通音效,播放这次声音时,取消上次声音static playEffectNoRepeat(audio: AudioType | string, type: VolumeType = VolumeType.OTHER, loop: boolean = false, cb?: (audioId: number) => void) {cc.audioEngine.setEffectsVolume(type === VolumeType.OTHER ? this.effectVolume : this.roleVolume);if (this.curPlayEffectId) {cc.audioEngine.stopEffect(this.curPlayEffectId);}cc.resources.load("mp3/" + audio, cc.AudioClip, (err, clip: cc.AudioClip) => {if (err) {console.error("playEffectNoRepeat", err);cb && cb(-1);return;}this.curPlayEffectId = cc.audioEngine.playEffect(clip, loop);cb && cb(this.curPlayEffectId);});}static _playEffect(audio: AudioType | string, loop: boolean = false, cb?: (audioId: number) => void) {cc.resources.load("mp3/" + audio, cc.AudioClip, (err, clip: cc.AudioClip) => {if (err) {console.error("_playEffect", err);cb && cb(-1);return;}let id = cc.audioEngine.playEffect(clip, loop);cb && cb(id);});}// bgm音量static setMusicVolume(volume: number, saved = true) {this.musicVolume = volume;cc.audioEngine.setMusicVolume(this.musicVolume);if (saved) cc.sys.localStorage.setItem("musicVolume", volume);}// 角色音效音量static setRoleVolume(volume: number, saved = true) {this.roleVolume = volume;if (saved) cc.sys.localStorage.setItem("roleVolume", volume);}// 普通音效音量static setEffectVolume(volume: number, saved = true) {this.effectVolume = volume;if (saved) cc.sys.localStorage.setItem("effectVolume", volume);}// 静音 / 恢复声音static setAudioEnabled(enabled: boolean) {if (enabled) {cc.audioEngine.setMusicVolume(this.musicVolume);cc.audioEngine.setEffectsVolume(this.effectVolume);} else {cc.audioEngine.setMusicVolume(0);cc.audioEngine.setEffectsVolume(0);}}// 读取用户音量设置static initVolumes() {let musicVolume = cc.sys.localStorage.getItem("musicVolume");let roleVolume = cc.sys.localStorage.getItem("roleVolume");let effectVolume = cc.sys.localStorage.getItem("effectVolume");this.musicVolume = musicVolume ? parseFloat(musicVolume) : 0.3;this.roleVolume = roleVolume ? parseFloat(roleVolume) : 1.0;this.effectVolume = effectVolume ? parseFloat(effectVolume) : 0.5;}
}export const enum AudioType {loginBgm = "bgm_lobby",     // 登录背景音乐button_01 = "UI_button",    // 按钮点击音效hitpop_A = "hitpop_A",  // 普通子弹击中1hitpop_B = "hitpop_B",  // 普通子弹击中2bgm_win = "bgm_win_01", //胜利bgm_fail = "bgm_fail_01", //失败bgm_boss_coming = "bgm_bossopening_01",   // boss出场音效role_hit = "hit_knife_01",          // 角色受伤时音效gold = "battery",       // 电池diamond = "chip",       // 钻石box_open = "boxopen",   // 得到卡牌碎片tutorial = "tutorial",   // 教程door = "door", //门request1 = "request1",  // 好友邀请音效slotcard = "slotcard",  // 随即机甲按钮losefire = "losefire",  // 随即机甲按钮duan_levelup = "levelup",  // 段位升级音效score_up = "pointnumber", // 结算分数音效
}export const enum VolumeType {MUSIC = 0,  // 背景音ROLE,       // 人声音效OTHER,      // 其他音效
}// 角色攻击音效
export function getRoleAttackAudio(roleId: number) {return "role/role_" + roleId + "attack";
}// 角色攻击音效
export function getRoleIdleAudio(roleId: number) {return "role/role_" + roleId + "idle";
}// 角色攻击音效
export function getCardUpgradeAudio() {return "card_upgrade";
}// 角色受伤音效
export function getRoleHurtAudio(roleId: number) {return "role/role_" + roleId + "hurt";
}

3.0:


/*音频管理类,主要负责音频的加载,播放*/
import { _decorator, Component, Node, AudioClip, sys } from 'cc';
import { ResMgr } from './ResMgr';
const { ccclass, property } = _decorator;@ccclass('AudioMgr')
export class AudioMgr {static curBgMusicPath: string = null!;static bgMusicArr: { [key: string]: AudioClip } = {};static soundEffectArr: { [key: string]: AudioClip } = {};static soundVolume: number = 1;static bgMusicVolume: number = 1;//播放背景音乐static playBgMusic(audioPath: string) {this.curBgMusicPath = audioPath;if (this.getBgMusicOpen()) {if (this.bgMusicArr[audioPath]) {this.bgMusicArr[audioPath].setVolume(this.bgMusicVolume);this.bgMusicArr[audioPath].play();} else {ResMgr.loadRes("audio/" + audioPath, AudioClip, (err, clip) => {if (err) {console.error("找不到背景音乐audio/" + audioPath + "的音频!");return;}this.bgMusicArr[audioPath] = clip;clip.setVolume(this.bgMusicVolume);clip.setLoop(true);clip.play();});}}}//暂停背景音乐static pauseBgMusic() {if (this.bgMusicArr[this.curBgMusicPath]) {this.bgMusicArr[this.curBgMusicPath].pause();}}//播放一般音频static playSoundEffect(audioPath: string) {if (this.getSoundEffectOpen()) {if (this.soundEffectArr[audioPath]) {this.soundEffectArr[audioPath].setVolume(this.bgMusicVolume);this.soundEffectArr[audioPath].play();} else {ResMgr.loadRes("audio/" + audioPath, AudioClip, (err, clip) => {if (err) {console.error("找不到音效audio/" + audioPath + "的音频!");return;}this.soundEffectArr[audioPath] = clip;clip.setVolume(this.soundVolume);clip.setLoop(false);clip.play();});}}}//设置背景音乐static setBgMusicOpen(open: boolean) {if (open) {sys.localStorage.setItem("BgMusic", "1");this.playBgMusic(this.curBgMusicPath);} else {sys.localStorage.setItem("BgMusic", "0");this.pauseBgMusic();}}static getBgMusicOpen(): boolean {if (sys.localStorage.getItem("BgMusic") == "0") {return false;} else {return true;}}//设置音效static setSoundEffect(open: boolean) {if (open) {sys.localStorage.setItem("SoundEffect", "1");} else {sys.localStorage.setItem("SoundEffect", "0");}}static getSoundEffectOpen(): boolean {if (sys.localStorage.getItem("SoundEffect") == "0") {return false;} else {return true;}}
}

以上是一些比较大的区别,3.0较之前的版本还是有很多的细小的区别,这里就不细说了。

CocosCreator3.0的版本改动相关推荐

  1. Rust学习(1)[rand]Rng::gen_range在0.8版本改动与生成随机数

    目录 唠嗑 rand 生成随机数_rand 0.7.3 生成随机数_rand 0.8.5 总结 唠嗑 本人小白,就读高中,要是文章哪里写错了多谢大佬纠正0V0 昨晚跟着视频学习生成随机数时,查找了ra ...

  2. electron 5.0.3版本 改动的地方

    BrowserWindow.getFocusedWindow 1. BrowserWindow.getFocusedWindow getFocusedWindow 已经不是一个方法了, 这个简单的问题 ...

  3. [Spark版本更新]--Spark-2.0.1版本的最新改动

    spark-2.0.1版本的最新改动 Sub-task(子任务) [SPARK-15232] - Add subquery SQL building tests to LogicalPlanToSQL ...

  4. Sharding-JDBC(二)2.0.3版本实践

    目录 一.Sharding-JDBC依赖 二.分片策略 1. 标准分片策略 2. 复合分片策略 3. Inline表达式分片策略 4. 通过Hint而非SQL解析的方式分片的策略 5. 不分片的策略 ...

  5. 番茄日志发布1.0.3版本-增加Kafka支持

    番茄日志(TomatoLog)能做什么 可能你是第一次听说TomatoLog,没关系,我可以从头告诉你,通过了解番茄日志,希望能帮助有需要的朋友,番茄日志处理将大大降低你采集.分析.处理日志的过程. ...

  6. Yii需要php版本,yii框架2.0.9版本发布了

    2.0.9版本是yii 2.0版本的次发布版,它包含了60多个新的小功能和一些bug修复. 有两个小改动可能会影响你现有的程序,所以检查一下 UPGRADE.md 文件 在这里由衷的感谢我们的yii社 ...

  7. 禅道 10.0.alpha 版本发布,全新的界面和交互体验

    禅道项目管理软件集产品管理.项目管理.质量管理.文档管理.组织管理和事务管理于一体,是一款功能完备的项目管理软件,完美地覆盖了项目管理的核心流程.禅道官网:http://www.zentao.net ...

  8. PDMS二次开发产品Naki.CI(二):升级到1.0.1版本

    目录 1.概述 2.升级功能介绍 3.GPART元件特性 4.GPART应用场景 5.下载地址 1.概述 1.0.1版本重点增加了GPART功能,GPART功能是CI的一个重要功能,使得编码的应用得到 ...

  9. SpringBoot整合DWR-3.0.2-RELEASE版本,以及解决项目在开发环境及其外置Tomcat运行正常,独立JAR形式内置Tomcat运行异常的问题

    SpringBoot整合DWR 3.0.2-RELEASE填坑日记 填坑背景 问题溯源 填坑步骤 一.示例代码结构 二.示例代码说明 1.框架配置代码编写 2.后端服务代码编写 3.后端服务注册配置 ...

最新文章

  1. Powershell管理系列(五)修改AD账号属性
  2. 封神召唤师显示服务器爆满,封神召唤师总是显示无法连接网络
  3. 64位OpenCV库生成32位库并配置环境变量
  4. python梯度下降法实现线性回归_【机器学习】线性回归——多变量向量化梯度下降算法实现(Python版)...
  5. 使用脚本编写 Vim 编辑器,第 5 部分: 事件驱动的脚本编写和自动化
  6. 前端页面高度和宽度自适应怎么做?
  7. 【LeetCode】104. Maximum Depth of Binary Tree (2 solutions)
  8. JS JAVASCRIPT 判断两个日期相隔多少天
  9. SpringMVC 另一种基于xml的处理器、适配器(了解)
  10. 使用matlab读取excel数据并保存
  11. 超标量、超流水、超线程
  12. 浅谈各种常见的芯片封装技术DIP/SOP/QFP/PGA/BGA
  13. 无盘服务器快慢取决于什么,cpu运行速度的快慢取决于什么
  14. Category 分类、类别 总结 - iOS
  15. ubuntu解决菜单栏和工具栏消失的方案
  16. 速卖通流量新赛道,AE Mall商家享有权益和招商标准,看这篇文章就好了
  17. 三级无刷交流发电机matlab模型,三级无刷交流发电机调压系统的建模及其仿真分析...
  18. 基于Redis(setnx)实现分布式锁
  19. linux u盘修复引导文件,centos bootloader安装到u盘后修复方法
  20. 更好地整理数据:windows下怎么让不同路径下的两个文件夹保持同步内容

热门文章

  1. Excel 2010 VBA 入门 048 批量替换文本中的指定字符(replayce函数和方法)
  2. TwinCAT3第三方伺服电机——汇川SV660N使用
  3. 如何查看一个网页的发布时间
  4. UVALive4374 Drive through MegaCity
  5. Java编程完成商城库存清单程序设计
  6. 分治算法:根号n段合并排序算法
  7. STM32 CAN总线冲突故障的分析和解决
  8. Android基于腾讯云实时音视频实现类似微信视频通话最小化悬浮
  9. 软件项目管理期末复习--项目过程模型
  10. 智能手机天线调谐设计