cocos2D插件转3D插件
cocos2D插件转3D插件
'use strict';/*** 3d插件api映射,兼容2d插件* */let fs = require("fs");let path = require("path");let baseDir = '';const prsPath = (Editor.Project && Editor.Project.path ? Editor.Project.path : Editor.remote.projectPath).replace(/\\/g,'/');// 2D 映射到 3D编辑器的命令let MAP_CMD = {'scene:enter-prefab-edit-mode' :'scene:open-scene','scene:open-by-uuid' :'scene:open-scene','assets:hint' : "twinkle", // 3d里高亮资源命令是 ‘twinkle’'hint' : "hint" // 高亮选中的节点,未找到映射关系}// 模拟creator2d插件的API实现let Editor2D ={isWin32 : path.sep == '\\',appPath : Editor.App.path,error : console.error,log : console.log,warn : console.warn,info : console.info,_getUrlLast(url_path,head){let p_i = url_path.indexOf(head);if(p_i!=-1){return url_path.substr(head.length+2);}},url(url_path){let absPath = Editor._getUrlLast(url_path,'packages:');if(absPath){return path.join(baseDir,absPath)}absPath = Editor._getUrlLast(url_path,'db:');if(absPath ) {return path.join(prsPath,absPath)}return url_path;},require(url){url = Editor2D.url(url);return require(url);},Ipc : {sendToPanel: (head,cmd,...args)=>Editor2D.Ipc._send(head,cmd,...args),sendToAll:(cmd,...args)=>Editor2D.Ipc.sendToMain(cmd,...args),sendToMain:(cmd,...args)=>{cmd = MAP_CMD[cmd] || cmd;let temp = cmd.split(':')if(temp[1]){Editor2D.Ipc._send(temp[0],temp[1] || "",...args);}else{Editor.Message.send(cmd,...args);}},_send(head,cmd,...args){let callback = arguments[arguments.length-1]Editor.Message.request(head,cmd,...args).then((v)=>{if(typeof callback == 'function'){callback(null,v);callback = null;}},()=>{if(typeof callback == 'function'){callback('run _send error');callback = null;}})}},Scene :{callSceneScript:(head,cmd,...args)=>{let info = {name: 'scene',method: cmd,args:args,}let callback = arguments[arguments.length-1]Editor2D.Ipc._send('scene','execute-scene-script',info,(callback instanceof Function) ? callback : null);},},assetdb:{assetBackupPath : path.join(prsPath,'temp','BackupAssets'),async urlToUuid(url){return await Editor.Message.request("asset-db",'query-uuid',url);},async uuidToUrl(uuid){return await Editor.Message.request("asset-db",'query-url',uuid);},async urlToFspath(uuidOrUrl){return await Editor.Message.request("asset-db",'query-path',uuidOrUrl);},async uuidToFspath(uuidOrUrl){return await Editor.Message.request("asset-db",'query-path',uuidOrUrl);},async fspathToUuid(fsPath){let url = "db://" + fsPath.replace(/\\/g,'/').replace(prsPath,'').substr(6);return await Editor.Message.request("asset-db",'query-uuid',url);},async existsByUuid(urlOrUUID){return await Editor.Message.request("asset-db",'query-asset-info',urlOrUUID);},async existsByUrl(urlOrUUID){return await Editor.Message.request("asset-db",'query-asset-info',urlOrUUID);},async assetInfoByUuid(urlOrUUID){return await Editor.Message.request("asset-db",'query-asset-info',urlOrUUID); // 注意3d返回字段与2d不太一样!},async assetInfoByUrl(urlOrUUID){return await Editor.Message.request("asset-db",'query-asset-info',urlOrUUID); // 注意3d返回字段与2d不太一样!},deepQuery(callback){if(!callback){return}Editor.Message.request("asset-db",'query-assets',{pattern:"db://**"}).then((list)=>{// 注意3d返回字段与2d不太一样!callback(null,list)},()=>{callback("run deepQuery error")});},queryInfoByUrl(...args){Editor2D.assetdb.queryInfoByUuid(...args)},queryInfoByUuid(urlOrUUID,callback){Editor.Message.request("asset-db",'query-asset-info',urlOrUUID).then((list)=>{// 注意3d返回字段与2d不太一样!callback(null,list)},()=>{callback("run queryInfoByUuid error")});},saveExists(url,text,callback){let promise = Editor.Message.request("asset-db",'save-asset',url,text).then(()=>{if(callback) callback()},()=>{if(callback) callback('save error')});},create(url,text,callback){let promise = Editor.Message.request("asset-db",'create-asset',url,text,{}).then((info)=>{if(callback) callback(null,info)},()=>{if(callback) callback('save error')});},delete(urls){for (let i = 0; i < urls.length; i++) {const url = urls[i];Editor.Message.request("asset-db",'delete-asset',url)}},move(source,target){Editor.Message.request("asset-db",'move-asset',source,target)},},Selection:{curGlobalActivate(){let type = Editor.Selection.getLastSelectedType();let ids = Editor.Selection.getSelected(type);return {type,id:ids[0]};},curSelection(type){return Editor.Selection.getSelected(type);},}}module.exports.analogApi = ()=>{let packageRoot = __dirname.replace(/\\/g,'/')packageRoot = packageRoot.substr(0,packageRoot.lastIndexOf('simple-code/')-1)baseDir = packageRoot;// 插入apilet copyFunc = (s_obj,t_obj)=>{for (const key in s_obj){const v = s_obj[key];if(t_obj[key] == null){t_obj[key] = v;}else if(t_obj[key] instanceof Object){copyFunc(v,t_obj[key]);}}}copyFunc(Editor2D,Editor);}
相关文章:
cocos2D插件转3D插件
cocos2D插件转3D插件 use strict;/*** 3d插件api映射,兼容2d插件* */let fs require("fs");let path require("path");let baseDir ;const prsPath (Editor.Project && Editor.Project.path ? Editor.Project.path : Editor.remote.projectP…...
[Angular] 主从表结构,从表记录在主表固定栏位上呈现
Background 主从表结构,有时为了方便数据呈现,在UI上不显示从表资料,那么需要动态把从表的资料加载到主表的固定栏位上。 例如:主表是人员信息,从表是银行卡信息,一个人在同一家银行可能有多张银行卡&…...
Kotlin Multiplatform 创建多平台分发库
目标:通过本教程学习如何使用 Kotlin Multiplatform Library 创建多平台分发库(iOS,安卓)。 创建一个项目 1、本教程使用的是Android Studio创建 2、选择 新建工程,选择 Kotlin Multiplatform Library 3、点击next 输入需要创建的项目名称以…...
[SQL挖掘机] - union/union all 使用注意事项
因为当使用union和union all操作符时,有一些注意事项需要考虑: 1. 列数和数据类型匹配: 要使用union或union all合并结果集,两个或多个查询的 select 语句必须返回相同数量和类型的列。确保每个查询返回相同的列数,并…...
php 单例模式
1,单例模式,属于创建设计模式,简单来说就是一个类只能有一个实例化对象,并提供一个当前类的全局唯一可访问入口; 2,例子 <?phpclass Singleton {private static $instance null;// 禁止被实例化priva…...
【数据结构】实验二:顺序表
实验二 顺序表 一、实验目的与要求 1)熟悉顺序表的类型定义; 2)熟悉顺序表的基本操作; 3)灵活应用顺序表解决具体应用问题。 二、实验内容 1)在一个整数序列a1,a2,…,an中,若存在一个数&…...
【高级数据结构】线段树
目录 最大数(单点修改,区间查询) 线段树1(区间修改,区间查询) 最大数(单点修改,区间查询) 洛谷:最大数https://www.luogu.com.cn/problem/P1198 题目描述 …...
qt简易闹钟
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);ui->stopBtn->setDisabled(true);this->setFixedSize(this->size()); //设置固定大小this->s…...
python和c加加有什么区别,c和c++和python先学哪个
本篇文章给大家谈谈c加加编程和python编程有什么区别,以及python和c加加有什么区别,希望对各位有所帮助,不要忘了收藏本站喔。 1、python和c学哪个好 学C好。 C通常比Python更快,因为C是一种编译型语言,而Python则是…...
Visual Studio 2022 cmake配置opencv开发环境
1. 环境与说明 这里我用的是 widnows 10 64位,Visual Studio 用的 Visual Studio Community 2022 (社区版) 对于Android开发工程师来说,为什么要使用Visual Studio 呢 ? 因为在Visual Studio中开发调试OpenCV方便,可以开发调试好后…...
C++ GDAL找出多时相遥感影像缺失的日期并自动生成新的全零图像作为替补
本文介绍基于C 语言的GDAL库,基于一个存储大量遥感影像的文件夹,依据每一景遥感影像的文件名中表示日期的那个字段,找出这些遥感影像中缺失的成像日期,并新生成多个像元值全部为0的栅格文件,作为这些缺失日期当日的遥感…...
【AI底层逻辑】——篇章5(下):机器学习算法之聚类降维时间序列
续上: 目录 4、聚类 5、降维 6、时间序列 三、无完美算法 往期精彩: 4、聚类 聚类即把相似的东西归在一起,与分类不同的是,聚类要处理的是没有标签的数据集,它根据样本数据的分布特性自动进行归类。 人在认知是…...
P1980 [NOIP2013 普及组] 计数问题
[NOIP2013 普及组] 计数问题 题目描述 试计算在区间 1 1 1 到 n n n 的所有整数中,数字 x x x( 0 ≤ x ≤ 9 0\le x\le9 0≤x≤9)共出现了多少次?例如,在 1 1 1 到 11 11 11 中,即在 1 , 2 , 3 , 4…...
需求管理全过程流程图及各阶段核心关注点详解
分析报告指出,多达76%的项目失败是因为差劲的需求管理,这个是项目失败的最主要原因,比落后的技术、进度失控或者混乱的变更管理还要关键。很多项目往往在开始的时候已经决定了失败,谜底就在谜面上,开始就注定的失败&am…...
Android开源 自定义emoji键盘,EmojiPack v2.1版本
目录 一,简介 二、安装 添加jitpack 仓库 添加依赖: 混淆规则: 三、使用 1、一次性配置emoji显示处理 二、emoji的自定义键盘的使用 一,简介 EmojiPack当前已提供emoji的显示和emoji的选择自定义键盘,在emoji显示这一方面࿰…...
SOLIDWORKS软件的优势分析 硕迪科技
在现代的机械设计领域,SOLIDWORKS是一款备受青睐三维设计软件,它具备强大的建模和设计功能,在全球范围内广泛应用于机械设计和工程领域,为用户提供了全面的工程解决方案。本文就SOLIDWORKS的优势进行详细分析。 1、易于学习和使用…...
Android性能优化之游戏的Theme背景图
近期,对游戏的内存优化,通过内存快照发现,某个Activity的theme背景图 占用3M 多。考虑着手对齐进行优化。 问题 查看游戏中的内存快照,发现有一个图片bitmap 占用3M 多,设置在Activity的背景中: 查看Phon…...
网络安全(黑客)系统自学,成为一名白帽黑客
前言 黑客技能是一项非常复杂和专业的技能,需要广泛的计算机知识和网络安全知识。你可以参考下面一些学习步骤,系统自学网络安全。 在学习之前,要给自己定一个目标或者思考一下要达到一个什么样的水平,是学完找工作(…...
lua学习-2 常见运算符
文章目录 赋值运算符普通赋值多重赋值交换赋值 算数运算符常见符号标识 关系运算符常见符号标识TIP 逻辑运算符常见符号标识模拟三目运算 赋值运算符 普通赋值 a 1b "123"c truec "true"多重赋值 a,b 1,2 a,b,c 2,"ss" -- c的值为nil交换赋…...
【图像处理】使用 OpenCV 将您的照片变成卡通
图像到卡通 一、说明 在当今世界,我们被图像和视频所包围。从社交媒体到广告,图像已成为一种强大的交流媒介。但是你有没有想过,如果你能把你的照片变成卡通会发生什么?想象一下,为您最喜欢的照片创建动画版本…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
加密通信 + 行为分析:运营商行业安全防御体系重构
在数字经济蓬勃发展的时代,运营商作为信息通信网络的核心枢纽,承载着海量用户数据与关键业务传输,其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级,传统安全防护体系逐渐暴露出局限性&a…...
AxureRP-Pro-Beta-Setup_114413.exe (6.0.0.2887)
Name:3ddown Serial:FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq7w1RH97k5MWctqVHA 注册用户名:Axure 序列号:8t3Yk/zu4cX601/seX6wBZgYRVj/lkC2PICCdO4sFKCCLx8mcCnccoylVb40lP...
DeepSeek越强,Kimi越慌?
被DeepSeek吊打的Kimi,还有多少人在用? 去年,月之暗面创始人杨植麟别提有多风光了。90后清华学霸,国产大模型六小虎之一,手握十几亿美金的融资。旗下的AI助手Kimi烧钱如流水,单月光是投流就花费2个亿。 疯…...
