cocos开发QA

目录

    • TS相关
      • foreach循环中使用return
      • 循环延迟
      • 动态获取类属性
    • Cocos相关
      • 属性检查器添加Enum属性
      • 使用Enum报错 枚举“XXX”用于其声明前
      • 实现不规则点击区域
      • 使用cc.RevoluteJoint的enable激活组件无效
      • 本地存储以及相关问题
      • JSON.stringify(map)返回{}
      • 数据加密
      • 客户端复制文本
      • 使用客户端方法
      • 热更新
      • 'LabelOutline.color' is deprecated. (Please use Label.outlineColor instead.)
      • 音效在浏览器正常播放,在安卓上无法播放
      • 使用AndroidStudio调试
      • 使用editbox设置输入内容
      • 第二次进入界面后注册事件内配置参数变为空了
    • 编辑器相关
      • 引擎升级后,VScode代码不同步
      • 引擎升级后,tsconfig.json报错
    • 其他
      • 删除字体显示“文件已在System”中打开

TS相关

foreach循环中使用return

就是一个简单的循环查找,用了foreach
发现无论查没查到,返回结果都是null

list.forEach(v => {if (v.tp == tp) {return v;}});return null;

原来一直遗漏了这个知识点:
foreach循环中使用return不会终止循环,只会在当次循环中跳出
其他循环是可以终止的

循环延迟

希望实现的功能是:有两句话,希望第一句话输出之后等一段时间再说第二句话。

就需要将for和setTimeout结合使用
正常setTimeout放到for中获取到的i只会是最终数值,就需要使用立即执行函数进行传递

for (let i = 0; i < lang.content.length; i++) {(function (i) {setTimeout(function () {console.log(i);}, 500 * i);})(i);
}

动态获取类属性

以前一直是使用this["btn_" + data.type];类似这样动态获取属性,但ts中类型判断导致报错↓
元素隐式具有 “any” 类型,因为类型为 “string” 的表达式不能用于索引类型 “noticeViewComComp”

将动态获取的key声明为this中属性的类型
let key = ('btnSp_' + data) as keyof typeof this;
this[key];
(但这样是不是不太好)

Cocos相关

目前用的版本是 2.0 2.4

属性检查器添加Enum属性

普通添加显示为数字,需要显示为下拉选择框
在这里插入图片描述

@property({type:cc.Enum(DirectionEnum),tooltip:"方向"}) direction: DirectionEnum = DirectionEnum.VERTICAL;

使用Enum报错 枚举“XXX”用于其声明前

在这里插入图片描述

枚举生命放在类的上方就行了

实现不规则点击区域

需要实现例如下图中白框内的点击事件,普通node只能是正矩形
在这里插入图片描述

目前只能使用不规则碰撞组件来实现,监听TOUCH_END事件
注意:节点大小要大于碰撞体区域,不然无法点击

使用cc.RevoluteJoint的enable激活组件无效

制作中需要将cc.RevoluteJoint组件enable为false后进行激活j.enable = true但是结果是可以挂上但是无支撑时会因重力掉下,和正常的cc.RevoluteJoint对象进行比较发现其_joint(好像是这个名)属性为空

当将未激活的cc.RevoluteJoint组件使用enable激活后需要j.apply();

本地存储以及相关问题

需要本地存储可以用cc.sys.localStorage.getItem()cc.sys.localStorage.setItem()

但是,
存储后拿取map类型的数据,就变为了Object类型,用不了set、get方法

目前解决方式是需要转一下
使用ES8:object.entries将object变为键值对数组new Map(Object.entries(obj))
但我用的不是ES8,就得循环去放入了

objectToMap(obj: object): Map<any, any> {let map = new Map();Object.keys(obj).forEach(key => {map.set(key, obj[key]);});return map;
}

JSON.stringify(map)返回{}

如上存储数据需要将数据转为字符串,但发现map转完就变成空对象了=_=

所以想用JSON.stringify处理Map时要先将Map类型转为Object

mapToObject(map: Map<any, any>): Object {let obj = {};map.forEach((v, k) => {obj[k] = v;});return obj;
}

也可以这么转

const obj = [...map.entries()].reduce((obj, [key, value]) => (obj[key] = value, obj), {})

数据加密

需要用的时候可以研究下[这篇帖子](https://blog.csd
n.net/qq_24726043/article/details/134082473?spm=1001.2014.3001.5501)

客户端复制文本

需要复制文本粘贴到微信

if (JSB) {try {native.copyTextToClipboard(str)(Ljava/lang/String;)V", u.invitation_code);oops.gui.toast("复制成功")} catch (error) {oops.gui.toast("复制失败")}
}

使用客户端方法

可以看文档
调用native的原生接口

热更新

打包步骤:

  1. 确保\assets\resources目录下的config.json中服务器地址配置正确(httpServer字段)
  2. cocos中打开构建发布面板,首次构建需要导入配置文件,已有配置的直接双击打开配置即可
  3. 确保填入正确的资源地址与版本号
  4. 点击“ 构建 ”开始构建
  5. 等待期间可以看下\assets\resources目录下的 project.manifestversion.manifest中的资源地址是否与填写的一致
  6. 等待构建完毕,如上一步一致则跳过第7步
  7. 将构建后的\oops_framework_remote\android下的两个manifest文件复制替换到\assets\resources目录下,再次构建项目,等待构建完毕
  8. 将构建后的\oops_framework_remote\android下的上一版本文件删除,只保留 本次版本文件两个manifest文件
  9. 压缩\oops_framework_remote下的android文件夹
  10. 登录发布地址并进入相应目录上传压缩文件
  11. 将原android文件夹删除,解压缩刚刚上传的文件
  12. 将压缩文件删除
  13. 完成

‘LabelOutline.color’ is deprecated. (Please use Label.outlineColor instead.)

cocos v3.8.3

发现使用<outline></outline>标签的richtext就会提示
看了帖子,应该是官方richtext组件中引用的加描边的方式还是老的,所以开发者无法解决。。。

音效在浏览器正常播放,在安卓上无法播放

这里是引用
换成有比特率的音频能正常播放,应该是格式方面的问题

使用AndroidStudio调试

下载gradle缓慢或者直接报错
修改proj --> gradle --> wrapper --> gradle-wrapper.properties
distributionUrl配置如下修改

distributionUrl=https://mirrors.aliyun.com/macports/distfiles/gradle/gradle-8.5-bin.zip

地址:
https://mirrors.aliyun.com/macports/distfiles/gradle/

能正常build工程后,将手机用usb连接到电脑(好像wifi也可),打开USB调试,
设备管理里就会出现测试用机
在这里插入图片描述
每次重新构建后,需要再次build
在这里插入图片描述
build完成后,直接运行或刷新就行
在这里插入图片描述
在浏览器打开devtools://devtools/bundled/js_app.html?v8only=true&ws=ip地址:43086/00010002-0003-4004-8005-000600070008就可以看控制台输出了

热更新导致重新构建本地代码后 调试版本仍为线上版本

试了将版本号提高仍不行,就把热更逻辑去掉了

使用editbox设置输入内容

需求是设置输入内容为大于0的数并且保留两位小数
InpurMode设置为NUMERIC在浏览器里预览效果是 限制输入为0和整数
但在真机上测效果是 限制输入为0和正数

因为只上安卓所以就直接在input事件里将内容保留两位小数了

第二次进入界面后注册事件内配置参数变为空了

出现的问题是item中操作后需要刷新整个列表,是通过事件触发实现的
第一次进入页面是可以正常刷新的,但第二次进入就不会刷新

通过打log发现事件是触发了的,但是其中的配置参数变为了null,所以this.list?.content导致代码中断
具体怎么一系列导致的不清楚,但需要在退出界面将事件取消注册,修改后就正常了

编辑器相关

引擎升级后,VScode代码不同步

cocos引擎升级后,项目升级,
提示脚本需要更改一些已弃用语法(如node.rotation改为node.angle)
但在vscode中报错飘红,cocos运行正常

在cocos引擎中,选择 开发者-VScode工作流-更新VScode智能提示数据

引擎升级后,tsconfig.json报错

在这里插入图片描述

目前原因不明
exclude添加"dist", "**/*.js"后重启vscode,无报错
再复原后重启vscode还是不报错(欠重启?)

其他

删除字体显示“文件已在System”中打开

已经将vscode和cocos都关了,还是删不了
在这里插入图片描述

是因为文件打开了预览 =_=‘’
在查看里关掉就好了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/59174.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode :21. 合并两个有序链表(Java)

目录 题目描述: 代码: 第一种: 第二种: 题目描述: 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 2&#xff1a; …

删除的文件怎么找回?删除文件恢复全面指南

我们常常在日常生活或工作中不小心删除了重要文件&#xff0c;这样的情况可能瞬间让人感到无助。不过&#xff0c;数据恢复技术已相当成熟&#xff0c;我们可以通过多种方法来找回误删的文件。下面我们将从简单到复杂逐步讲解找回删除文件的方法&#xff0c;希望可以帮助大家在…

D57【python 接口自动化学习】- python基础之异常

day57 异常捕获 学习日期&#xff1a;20241103 学习目标&#xff1a;异常 -- 73 异常捕获&#xff1a;出现异常时&#xff0c;如何利用程序进行处理&#xff1f; 学习笔记&#xff1a; try-except代码块 # 捕获异常 num1 num10 try:num/num1except Exception as e:print(上…

【06】A-Maven项目SVN设置忽略文件

做Web项目开发时&#xff0c;运用的是Maven管理工具对项目进行管理&#xff0c;在项目构建的过程中自动生成了很多不需要SVN进行管理的文件&#xff0c;SVN在对源码进行版本管理时&#xff0c;需要将其忽略&#xff0c;本文给出了具体解决方案。 SVN设置忽略Maven项目中自动生成…

logback日志级别动态切换四种方案

生产环境中经常有需要动态修改日志级别。 现在就介绍几种方案 方案一&#xff1a;开启logback的自动扫描更新 配置如下 <?xml version"1.0" encoding"UTF-8"?> <configuration scan"true" scanPeriod"60 seconds" debug…

Linux——Ubuntu的基础操作

压缩与解压缩 gzip压缩工具 创建文件 a.c和b.c touch a.c touch b.c 压缩文件a.c和b.c gzip a.c gzip b.c 解压缩a.c.gz和b.c.gz gzip -d a.c.gz 对文件夹进行压缩 gzip -r 对文件夹进行解压缩 gzip -rd 注意&#xff1a;这只是对文件夹里所有文件进行压缩&#xff0c…

win10下MMSegmentation自定义数据集

下载1.2.1版本: Releases open-mmlab/mmsegmentation GitHub 安装环境 本地torch环境为1.9.1 pip install -U openmim mim install mmengine mim install "mmcv>=2.0.0" 报mmcv版本不匹配的问题,形如:MMCV==X.X.X is used but incompatible. Please inst…

App Store 截图生成器:轻松制作专业级应用营销图片

在线使用 &#x1f449; 立即使用截图生成器 简介 App Store 截图生成器是一个专门为 iOS 开发者和营销人员设计的在线工具&#xff0c;可以快速生成符合 App Store 规范的应用预览图片。无论是 iPhone 还是 iPad 应用&#xff0c;都能轻松创建出精美的营销截图。 主要特点…

2024年超详细Pycharm安装保姆级教程,Python环境配置和使用指南,看完这一篇就够了

PyCharm 是由 JetBrains 打造的一款 Python IDE &#xff08;集成开发环境&#xff0c;Integrated Development Environment&#xff09;&#xff0c;带有一整套可以帮助用户在使用 Python 语言开发时提高其效率的工具&#xff0c;比如调试、语法高亮、Project 管理、代码跳转、…

使用DJL和PaddlePaddle的口罩检测详细指南

使用DJL和PaddlePaddle的口罩检测详细指南 完整代码 该项目利用DJL和PaddlePaddle的预训练模型&#xff0c;构建了一个口罩检测应用程序。该应用能够在图片中检测人脸&#xff0c;并将每张人脸分类为“戴口罩”或“未戴口罩”。我们将深入分析代码的每个部分&#xff0c;以便…

filebeat+elasticsearch+kibana日志分析

1 默认配置 1.1 filebeat filebeat-7.17.yml,从网关中下载k8s的配置&#xff0c;指定es和kibana的配置 通过kibana查询可以查询到日志了&#xff0c;但此时还不知道具体怎么用。 1.2 kibana 在Discover中创建索引格式&#xff1a;filebeat-*&#xff0c;得到如下图&#xf…

MySQL表的增删改查(CRUD1)

好兄弟们&#xff0c;有没有忘了咱们上节说的知识点呢&#xff1f;忘了也没关系&#xff0c;让我们开始复习吧&#xff01;&#xff01;&#xff01; 上期我们介绍了数据类型&#xff0c;还有一些表的操作&#xff0c;我们常用的数据类型有&#xff1a;1.数值类型 tinyint …

C++和OpenGL实现3D游戏编程【连载17】——着色器进阶(附源码)

🔥C++和OpenGL实现3D游戏编程【目录】 1、本节要实现的内容 在前面着色器初步一节我们了解了着色器的一些初步知识,通过顶点着色器和片段着色器显示出了一个彩色的立方体。我们这节课就来了解一些在着色器中显示纹理等一系列实用操作,同时了解一些进阶的图像渲染技术,比如…

C++ | Leetcode C++题解之第520题检测大写字母

题目&#xff1a; 题解&#xff1a; class Solution { public:bool detectCapitalUse(string word) {// 若第 1 个字母为小写&#xff0c;则需额外判断第 2 个字母是否为小写if (word.size() > 2 && islower(word[0]) && isupper(word[1])) {return false;…

教育技术革新:SpringBoot在线试题库系统开发

2 相关技术 2.1 Spring Boot框架简介 Spring Boot是由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置&#xff0c;从而使开发人员不再需要定义样板化的配置。通过这种方式&#xff0c;Sprin…

React + Vite + TypeScript + React router项目搭建教程

一、创建项目 运行项目 二、目录结构 项目目录&#xff1a; ├─node_modules //第三方依赖 ├─public //静态资源&#xff08;不参与打包&#xff09; └─src├─assets //静态资源├─components //组件├─config //配置├─http //请求方法封装├─layout //页面…

Android笔记(三十一):FrameLayout遇到的坑

背景 当FrameLayout里面是match_parent的时候&#xff0c;如果FrameLayout是wrap_content,则里面的view也会被当作wrap_content处理 原因 FrameLayout内的measureChildWithMargins -> getChildMeasureSpec的子类的MeasureSpec确定规则由父类的MeasureSpec和子类的LayoutP…

【设计模式】结构型模式(一):适配器模式、装饰器模式

结构型模式&#xff08;一&#xff09;&#xff1a;适配器模式、装饰器模式 1.适配器模式&#xff08;Adapter&#xff09;2.装饰器模式&#xff08;Decorator&#xff09;2.1 主要特点2.2 组成部分2.3 示例代码2.3.1 Component 组件2.3.2 ConcreteComponent 具体组件2.3.3 Dec…

认识物联网

新一代信息技术 物联网 物物相连的互联网&#xff0c;即物联网&#xff0c;又称传感器常见的传感器 • 温度传感器 • 压力传感器 • 声音传感器 • 02 • */08521 物联网概念 • 通过射频识别&#xff0c;红外传感器&#xff0c;全球定位系统GPS&#xff0c;激光扫描…

C语言 | Leetcode 题解之第535题TinyURL的加密与解密

题目&#xff1a; 题解&#xff1a; typedef struct {int key;char *val;UT_hash_handle hh; } HashItem;HashItem *dataBase NULL;char* encode(char* longUrl) {srand(time(0));int key;HashItem * pEntry NULL;while (true) {key rand();pEntry NULL;HASH_FIND_INT(dat…