我勒个豆,什么引擎组给开发者改游戏bug
大佬我也有个问题,之前在2.4.x里用属性装饰器,能在里面的set里做一些处理(比如触发相关的事件),但是在3.8的时候这个属性装饰器就不能用了,我在node的环境下也试过装饰器能正常使用,想问一下这个是什么原因,现在用3.8写不能用这个属性装饰器就是有点麻烦
function emit(eventEnum: string) {
return function (target: any, propertyKey: any) {
const getter = function () {
return this["_" + propertyKey]
};
const setter = function (newValue: any) {
this["_" + propertyKey] = newValue
console.log("setter: " + propertyKey + " = " + newValue);
EventManage.emit(eventEnum)
};
Object.defineProperty(target, propertyKey, {
get: getter,
set: setter,
enumerable: true,
configurable: true,
});
}
}
热更新可以直接用
3.8.5有这个bug请帮忙看看
KunpoCreator3.8.zip (453.5 KB) @dumganhar 大佬关于上边提到的问题,是哪里的问题能帮忙给看看吗,附件中是我的demo
现在打开项目的时候,会去加载kunpo-fgui插件,插件中用到了项目中名称为kunpocc的npm包,import时报警告
在另一个帖子中也有描述信息
好的 谢谢

这玩意我试过,不好用,好像是有线程问题,多调用几次就崩了
function emit(eventEnum: string): any {
return function (target: any, propertyKey: any, descriptor: PropertyDescriptor): PropertyDescriptor {
const getter = function () {
console.log("getter: " + propertyKey);
return this["_" + propertyKey]
};
const setter = function (newValue: any) {
this["_" + propertyKey] = newValue
console.log("setter: " + propertyKey + " = " + newValue);
EventManage.emit(eventEnum)
};
// Object.defineProperty(target, propertyKey, {
// get: getter,
// set: setter,
// enumerable: true,
// configurable: true,
// });
if ('initializer' in descriptor) {
target["_" + propertyKey] = (descriptor as any).initializer();
}
delete (descriptor as any).initializer;
delete descriptor.writable;//
return Object.assign(descriptor, { get: getter, set: setter });
}
}
这样试试。
但这有个问题:就是 initializer 初始化后的值被作用在原型上,而不是对象的属性上。
目前受限于 babel 的实现。具体可以看这个帖子的讨论:
感谢反馈,有同学在跟进中。有进展会同步。
辛苦~
今晚又尝试了下,在项目的ts脚本中通过给全局对象添加属性的方式
globalThis[“abc”] = {a:1, b:2, c:3}
在插件的scene.ts中是可以正常取到数据的
感谢大佬,新年快乐啊,这样可以了,是因为在3.x引擎修改了装饰器的编译方式吗,2.x对于装饰器的编译是tsc可以用Object.defineProperty修改而不用返回值,3.x使用babel必须返回一个PropertyDescriptor或者其他预期的值,才能处理属性的行为,我理解是这样的
好的,我确认下
多调用几次会奔溃,你是怎么调用的?方便提供demo看看么?
嗯,2.x 是用 tsc,3.x 改用 babel 后导致的差异。
项目中已经不再用这种方式了
现在换成了
这种方式来处理
我的creator版本是2.4.14
导出鸿蒙项目用的是 jsvm
具体实现是看的这两个文档,你可以按照这个文档写几个方法试试
-
如何在 HarmonyOS 平台上使用 ArkTs 直接调用 JavaScript 方法
templates/openharmony/native/engine/doc/如何在 HarmonyOS 平台上使用 ArkTs 直接调用 JavaScript 方法.md · lestelhw/engine-native_1 - Gitee.com -
如何在 HarmonyOS 平台上使用 JavaScript 直接调用 ArkTs 方法
templates/openharmony/native/engine/doc/如何在 HarmonyOS 平台上使用 JavaScript 直接调用 ArkTs 方法.md · lestelhw/engine-native_1 - Gitee.com








