Project1

标题: 新人想求助下插件里提取变量的问题 [打印本页]

作者: olico    时间: 2022-1-16 02:26
标题: 新人想求助下插件里提取变量的问题
rt,想实现随着游戏变量变化游戏菜单背景图片也变化的功能,找到了MenubackGround这款插件,但这款插件不能调用游戏内的变量。为此修改了代码  var backGroundBitmap =""+$gameVariables.value(1);但是没办法正常运行,调试台这句会显示Uncaught TypeError: Cannot read property 'value' of null
游戏里默认变量1的值是0, 如果直接写var backGroundBitmap ="0"是没有问题的。所以想请问下各位大佬这是为什么。非常感谢。
作者: 任小雪    时间: 2022-1-16 09:30
不加双引号和加号试试?
作者: 仇九    时间: 2022-1-16 10:17
原因是:(可以直接看解决办法)
首先游戏会先加载所有的插件,执行插件js文件中写的指令,此时$gameVariables这个对象还没有被定义。(定义函数和执行函数不一样)
var backGroundBitmap =""+$gameVariables.value(1);
这条指令可能是直接放在js文件里直接执行的,这个时候$gameVariables还没有定义所以没法正常执行。
在加载完全部的脚本后$gameVariables才会被定义,所以出了问题。
这个时候backGroundBitmap这个量是局部变量,没有办法在外部访问和改变。
且就算var backGroundBitmap =""+$gameVariables.value(1);能够正常执行,那
backGroundBitmap也会变成一个定值,就算再改1号变量的值,backGroundBitmap也不会随之改变。

最简单的解决办法就是:
将var backGroundBitmap =""+$gameVariables.value(1);这句话改为window.backGroundBitmap = "0";
然后就可以了。
在游戏运行时,若你需要修改菜单背景图片,那么可以不用变量(使用变量会更麻烦),
只需要在事件的“脚本”(在插件指令上方的那个指令)中写
backGroundBitmap = "1";
就行,后面的1可以改成你需要的图片名。
(此方法是否能正常解决问题还是得看MenubackGround这个插件到底是咋实现的)
作者: 夏虫沉默    时间: 2022-1-16 10:19
本帖最后由 夏虫沉默 于 2022-1-16 10:37 编辑

数字类型转换成字符串的话,你可以试下其他的写法,var backGroundBitmap =$gameVariables.value(1).toString();
或者var backGroundBitmap =String($gameVariables.value(1));
楼上应该是正解,举个简单的例子,比如我在网上买了台新电脑,但是快递还没到,这个时候选择打开我的新电脑,就会出现这个找不到对象的异常,所以需要先判断对象是否存在,然后再进行操作。
作者: xiamumomo    时间: 2022-1-16 11:54
我没记错的话 就像技能公式添加变量默认的变量不是0 变量没有赋值emmm  当你游戏先通过事件对这个变量赋值 = X的话应该就可以
作者: olico    时间: 2022-1-16 11:59
仇九 发表于 2022-1-16 10:17
原因是:(可以直接看解决办法)
首先游戏会先加载所有的插件,执行插件js文件中写的指令,此时$gameVariab ...

谢谢大佬!按照您的意见修改就可以实现这个功能了!我想要用变量来实现这个功能是因为之前找到了CBR_eroStatus这个插件,这个插件可以在菜单里新建一栏并对其里面的内容进行编辑。它是可以支持调用变量来改变背景图片,所以我以为变量是可以很简单调用的,看来人家为实现这个功能应该是特意写了些东西的。
作者: 仇九    时间: 2022-1-16 17:52
olico 发表于 2022-1-16 11:59
谢谢大佬!按照您的意见修改就可以实现这个功能了!我想要用变量来实现这个功能是因为之前找到了CBR_eroS ...

嗯,是啊。

如果你想实现你想要的那个效果(改变变量后菜单背景图自动变化),那你需要将
var backGroundBitmap =""+$gameVariables.value(1);
这句话改为:(变得看起来有点复杂了)

JAVASCRIPT 代码复制
  1. Object.defineProperty(window, 'backGroundBitmap', {
  2.     get: function() {
  3.         return "背景图片"+($gameVariables?$gameVariables.value(1):"0");
  4.     },
  5.     configurable: true
  6. });


这样也行。
以后只要你改变1号变量的值,那么菜单背景就会随之变化,比如你设置1号变量为1,那么背景图片的图片名就会变成"背景图片1"。
不设置变量1的值时,会使用变量1的默认值0,也就是"背景图片0"。
以后你改变量1的值就能自动修改背景图片名。
若在系统未载入$gameVariables时读取,那么也不会报错,会采用$gameVariables未定义时的默认值"0",也就是"背景图片0"。

但是……但是CBR_eroStatus里要实现这个效果肯定用的不是这种办法,应该是进行了特殊的处理。

作者: soulsaga    时间: 2022-1-16 18:15
MenubackGround这款插件37行
JAVASCRIPT 代码复制
  1. ImageManager.loadPicture(backGroundBitmap+$gameVariables.value(1));


未测可不行




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1