设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2654|回复: 8
打印 上一主题 下一主题

[有事请教] 新人想求助下插件里提取变量的问题

[复制链接]

Lv2.观梦者

梦石
0
星屑
270
在线时间
29 小时
注册时间
2022-1-5
帖子
2
跳转到指定楼层
1
发表于 2022-1-16 02:26:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
rt,想实现随着游戏变量变化游戏菜单背景图片也变化的功能,找到了MenubackGround这款插件,但这款插件不能调用游戏内的变量。为此修改了代码  var backGroundBitmap =""+$gameVariables.value(1);但是没办法正常运行,调试台这句会显示Uncaught TypeError: Cannot read property 'value' of null
游戏里默认变量1的值是0, 如果直接写var backGroundBitmap ="0"是没有问题的。所以想请问下各位大佬这是为什么。非常感谢。

Lv3.寻梦者

梦石
0
星屑
2866
在线时间
446 小时
注册时间
2016-9-26
帖子
1223
2
发表于 2022-1-16 09:30:39 | 只看该作者
不加双引号和加号试试?
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
16
星屑
12065
在线时间
1413 小时
注册时间
2020-3-21
帖子
365

极短23获奖

3
发表于 2022-1-16 10:17:27 | 只看该作者
原因是:(可以直接看解决办法)
首先游戏会先加载所有的插件,执行插件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这个插件到底是咋实现的)
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1830
在线时间
314 小时
注册时间
2021-11-7
帖子
165
4
发表于 2022-1-16 10:19:24 | 只看该作者
本帖最后由 夏虫沉默 于 2022-1-16 10:37 编辑

数字类型转换成字符串的话,你可以试下其他的写法,var backGroundBitmap =$gameVariables.value(1).toString();
或者var backGroundBitmap =String($gameVariables.value(1));
楼上应该是正解,举个简单的例子,比如我在网上买了台新电脑,但是快递还没到,这个时候选择打开我的新电脑,就会出现这个找不到对象的异常,所以需要先判断对象是否存在,然后再进行操作。

点评

加个判断?默认是零,如果有这个变量,则被这个变量赋值?  发表于 2022-1-16 10:53
欲速春风山劝阻,不得恰恰不得呼。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9852
在线时间
1884 小时
注册时间
2020-1-2
帖子
1089
5
发表于 2022-1-16 11:54:48 | 只看该作者
我没记错的话 就像技能公式添加变量默认的变量不是0 变量没有赋值emmm  当你游戏先通过事件对这个变量赋值 = X的话应该就可以
B站没人气的夏目漠漠,直播间:5378938实用插件教程点击红字传送
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
270
在线时间
29 小时
注册时间
2022-1-5
帖子
2
6
 楼主| 发表于 2022-1-16 11:59:21 | 只看该作者
仇九 发表于 2022-1-16 10:17
原因是:(可以直接看解决办法)
首先游戏会先加载所有的插件,执行插件js文件中写的指令,此时$gameVariab ...

谢谢大佬!按照您的意见修改就可以实现这个功能了!我想要用变量来实现这个功能是因为之前找到了CBR_eroStatus这个插件,这个插件可以在菜单里新建一栏并对其里面的内容进行编辑。它是可以支持调用变量来改变背景图片,所以我以为变量是可以很简单调用的,看来人家为实现这个功能应该是特意写了些东西的。
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
16
星屑
12065
在线时间
1413 小时
注册时间
2020-3-21
帖子
365

极短23获奖

7
发表于 2022-1-16 17:52:25 | 只看该作者
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里要实现这个效果肯定用的不是这种办法,应该是进行了特殊的处理。
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
36407
在线时间
10794 小时
注册时间
2009-3-15
帖子
4813
8
发表于 2022-1-16 18:15:14 | 只看该作者
MenubackGround这款插件37行
JAVASCRIPT 代码复制
  1. ImageManager.loadPicture(backGroundBitmap+$gameVariables.value(1));


未测可不行
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-18 11:43

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表