Project1

标题: 关于插件编写 [打印本页]

作者: bloodship    时间: 2017-11-2 16:41
标题: 关于插件编写
我没有学过编程,可能描述的不清楚。
@param 设置的参数,后面怎么调用?
例如,我设置的是图片,怎么使用这个设置呢。
我看插件编写教程,设置背景图片的那个里,他是这么写的
this._backgroundSprite.bitmap=ImageManager.loadParallax(imageName)
我想让他直接调用我设置的图片,这么写了
this._backgroundSprite.bitmap=ImageManager('XXXX')
可是不好使啊,究竟该怎么做呢?
作者: 雪在燃    时间: 2017-11-2 17:39
借助别人的代码回答问题=w=
  1. var parameters        = PluginManager.parameters('VIPArcher_Bubble_Message');
  2. 获取名字为VIPArcher_Bubble_Message的脚本参数的一个集
  3. parameters['BubbleTagName']获取名字为BubbleTagName的参数
复制代码

至于第二个问题,ImageManager.loadParallax(imageName) 是一个特殊定义的方法,它才可以直接使用图片名称
  1. ImageManager.loadParallax = function(filename, hue) {
  2.     return this.loadBitmap('img/parallaxes/', filename, hue, true);
  3. };
复制代码

这是它的定义,同理你可以使用
ImageManager.loadBitmap('路径','图片名称')来作为图片的设置
作者: bloodship    时间: 2017-11-2 20:24
雪在燃 发表于 2017-11-2 17:39
借助别人的代码回答问题=w=

至于第二个问题,ImageManager.loadParallax(imageName) 是一个特殊定义的方法 ...

我想写成这样的,就不能用imagemanager了吧?
还是不该这么写,我究竟得怎么办。
JAVASCRIPT 代码复制
  1. /*:
  2.  * @plugindesc 主菜单管理
  3.  * @author 来自网络教程
  4.  * @help
  5.  
  6.  
  7.  * @param 背景图片设置
  8.  * @type struct<list1>[]
  9.  * @desc 可选项
  10.  * @default []
  11.  
  12.  * @param 菜单编辑
  13.  * @desc 可选项
  14.  * @type struct<list2>[]
  15.  * @default []
  16. */
  17.  
  18. /*~struct~list1:
  19.  
  20.  * @param 生效
  21.  * @type boolean
  22.  * @on 是
  23.  * @off 否
  24.  * @desc 否:false 是:true
  25.  * @default true
  26.  
  27.  * @param 主菜单
  28.  * @type file
  29.  * @desc 主菜单背景使用的图片
  30.  * @dir img\parallaxes
  31.  
  32.  * @param 物品栏
  33.  * @type file
  34.  * @desc 物品栏背景使用的图片
  35.  * @dir img\parallaxes
  36.  
  37.  * @param 技能界面
  38.  * @type file
  39.  * @desc 技能界面背景使用的图片
  40.  * @dir img\parallaxes
  41.  
  42.  * @param 装备界面
  43.  * @type file
  44.  * @desc 装备界面背景使用的图片
  45.  * @dir img\parallaxes
  46.  
  47.  * @param 存档界面
  48.  * @type file
  49.  * @desc 存档界面背景使用的图片
  50.  * @dir img\parallaxes
  51.  
  52.  * @param 其他界面
  53.  * @type file
  54.  * @desc 其他界面背景使用的图片
  55.  * @dir img\parallaxes
  56. */
  57.  
  58.  
  59. /*~struct~list2:
  60.  
  61.  * @param 生效
  62.  * @type boolean
  63.  * @on 是
  64.  * @off 否
  65.  * @desc 否:false 是:true
  66.  * @default true
  67.  
  68.  * @param 名称
  69.  * @desc 显示在菜单中的名称
  70.  * @type text
  71.  
  72.  
  73.  * @param 命令
  74.  * @desc 英文命令
  75.  * @type text
  76. */
  77.  
  78.  
  79. var params = PluginManager.parameters("edit_menu");
  80.  
  81. Scene_MenuBase.prototype.createBackground = function() {
  82.     this._backgroundSprite=new Sprite();
  83.     var imageName;
  84.     if(this instanceof Scene_Menu){
  85.         imageName = params["主菜单"];
  86.     }else if(this instanceof Scene_Item){
  87.         imageName = params["物品栏"]
  88.     }else if(this instanceof Scene_Skill){
  89.         imageName = params["技能界面"]
  90.     }else if(this instanceof Scene_Equip){
  91.         imageName = params["装备界面"]
  92.     }else if(this instanceof Scene_Save || this instanceof  Scene_Load) {
  93.         imageName = params["存档界面"]
  94.     }else{
  95.         imageName = params["其他界面"]
  96.     }
  97.     this._backgroundSprite.bitmap=ImageManager(imageName);
  98.     this.addChild(this._backgroundSprite);
  99. };
  100.  
  101.  
  102. Window_MenuCommand.prototype.addOriginalCommands = function () {
  103.     this.addCommand(params["名称"], params["命令"],params["生效"]);
  104. };
  105.  
  106. var _Scene_Menu_createCommandWindow = Scene_Menu.prototype.createCommandWindow;
  107. Scene_Menu.prototype.createCommandWindow = function () {
  108.     _Scene_Menu_createCommandWindow.call(this);
  109.  
  110.     this._commandWindow.setHandler(params['命令'], this.commandRename.bind(this));
  111. };
  112.  
  113. Scene_Menu.prototype.commandRename = function () {
  114.     this._statusWindow.setFormationMode(false);
  115.     this._statusWindow.selectLast();
  116.     this._statusWindow.activate();
  117.     this._statusWindow.setHandler('ok',     this.rename_ok.bind(this));
  118.     this._statusWindow.setHandler('cancel', this.rename_cancel.bind(this));
  119. };
  120. Scene_Menu.prototype.rename_ok = function() {
  121.     SceneManager.push(Scene_Name);
  122.     SceneManager.prepareNextScene($gameParty.menuActor()._actorId, 10);
  123. };
  124. Scene_Menu.prototype.rename_cancel = function() {
  125.     this._statusWindow.deselect();
  126.     this._commandWindow.activate();
  127. };
  128.  
  129. Window_MenuStatus.prototype.processOk = function() {
  130.     $gameParty.setMenuActor($gameParty.members()[this.index()]);
  131.     Window_Selectable.prototype.processOk.call(this);
  132. };



作者: soulsaga    时间: 2017-11-2 20:32
bloodship 发表于 2017-11-2 20:24
我想写成这样的,就不能用imagemanager了吧?
还是不该这么写,我究竟得怎么办。
/*:

字符不是要用'符号?
作者: bloodship    时间: 2017-11-2 20:38
soulsaga 发表于 2017-11-2 20:32
字符不是要用'符号?

好的,我改成单引号。
作者: 雪在燃    时间: 2017-11-2 20:47
bloodship 发表于 2017-11-2 20:24
我想写成这样的,就不能用imagemanager了吧?
还是不该这么写,我究竟得怎么办。
/*:

可以用imagemanager,
也可以单独写一个自定义的方法
  1. ImageManager.loadxxx = function(filename, hue) {
  2.     return this.loadBitmap('img/xxx/', filename, hue, true);
  3. };
复制代码

这样应该就可以用ImageManager.loadxxx来访问img/xxx路径下的代码了

作者: bloodship    时间: 2017-11-2 20:55
本帖最后由 bloodship 于 2017-11-2 20:57 编辑

我重新改一下
作者: bloodship    时间: 2017-11-2 21:01
改成这样了,没有报错,但是背景是黑色的,应该是没有选择到图
JAVASCRIPT 代码复制
  1. var params = PluginManager.parameters("edit_menu");
  2.  
  3. Scene_MenuBase.prototype.createBackground = function() {
  4.     this._backgroundSprite=new Sprite();
  5.  
  6.         ImageManager.loadParallax = function(filename, hue) {
  7.     return this.loadBitmap('img/Parallax/', filename, hue, true);
  8.      };
  9.  
  10.     var imageName;
  11.     if(this instanceof Scene_Menu){
  12.         imageName = params['主菜单'];
  13.     }else if(this instanceof Scene_Item){
  14.         imageName = params['物品栏']
  15.     }else if(this instanceof Scene_Skill){
  16.         imageName = params['技能界面']
  17.     }else if(this instanceof Scene_Equip){
  18.         imageName = params['装备界面']
  19.     }else if(this instanceof Scene_Save || this instanceof  Scene_Load) {
  20.         imageName = params['存档界面']
  21.     }else{
  22.         imageName = params['其他界面']
  23.     }
  24.     this._backgroundSprite.bitmap=ImageManager.loadParallax(imageName);
  25.     this.addChild(this._backgroundSprite);
  26. };



作者: 雪在燃    时间: 2017-11-2 21:30
bloodship 发表于 2017-11-2 21:01
改成这样了,没有报错,但是背景是黑色的,应该是没有选择到图
var params = PluginManager.parameters("ed ...

没有对应的图片,你可以放一张图片在img/parallax文件夹下,然后把imageName = '文件名'
应该就没有问题了
作者: bloodship    时间: 2017-11-2 21:37
雪在燃 发表于 2017-11-2 21:30
没有对应的图片,你可以放一张图片在img/parallax文件夹下,然后把imageName = '文件名'
应该就没有问题 ...

对,就是你说的这个症状!
我练习一下,所以就改教程了。我想在插件界面选择图片就可以直接设置背景,不用编辑插件。我的想法不能用imagemanager吧?

JAVASCRIPT 代码复制
  1. /*:
  2.  * @plugindesc 主菜单管理
  3.  * @author 来自网络教程
  4.  * @help
  5.  
  6.  
  7.  * @param 背景图片设置
  8.  * @type struct<list1>[]
  9.  * @desc 可选项
  10.  * @default []
  11.  
  12.  * @param 菜单编辑
  13.  * @desc 可选项
  14.  * @type struct<list2>[]
  15.  * @default []
  16. */
  17.  
  18. /*~struct~list1:
  19.  
  20.  * @param 生效
  21.  * @type boolean
  22.  * @on 是
  23.  * @off 否
  24.  * @desc 否:false 是:true
  25.  * @default true
  26.  
  27.  * @param 主菜单
  28.  * @type file
  29.  * @desc 主菜单背景使用的图片
  30.  * @dir img\parallaxes
  31.  
  32.  * @param 物品栏
  33.  * @type file
  34.  * @desc 物品栏背景使用的图片
  35.  * @dir img\parallaxes
  36.  
  37.  * @param 技能界面
  38.  * @type file
  39.  * @desc 技能界面背景使用的图片
  40.  * @dir img\parallaxes
  41.  
  42.  * @param 装备界面
  43.  * @type file
  44.  * @desc 装备界面背景使用的图片
  45.  * @dir img\parallaxes
  46.  
  47.  * @param 存档界面
  48.  * @type file
  49.  * @desc 存档界面背景使用的图片
  50.  * @dir img\parallaxes
  51.  
  52.  * @param 其他界面
  53.  * @type file
  54.  * @desc 其他界面背景使用的图片
  55.  * @dir img\parallaxes
  56. */
  57.  
  58.  
  59. /*~struct~list2:
  60.  
  61.  * @param 生效
  62.  * @type boolean
  63.  * @on 是
  64.  * @off 否
  65.  * @desc 否:false 是:true
  66.  * @default true
  67.  
  68.  * @param 名称
  69.  * @desc 显示在菜单中的名称
  70.  * @type text
  71.  
  72.  
  73.  * @param 命令
  74.  * @desc 英文命令
  75.  * @type text
  76. */
  77.  
  78. var params = PluginManager.parameters("edit_menu");
  79.  
  80. Scene_MenuBase.prototype.createBackground = function() {
  81.     this._backgroundSprite=new Sprite();
  82.  
  83.         ImageManager.loadParallax = function(filename, hue) {
  84.     return this.loadBitmap('img/Parallax/', filename, hue, true);
  85.      };
  86.  
  87.     var imageName;
  88.     if(this instanceof Scene_Menu){
  89.         imageName = params['主菜单'];
  90.     }else if(this instanceof Scene_Item){
  91.         imageName = params['物品栏']
  92.     }else if(this instanceof Scene_Skill){
  93.         imageName = params['技能界面']
  94.     }else if(this instanceof Scene_Equip){
  95.         imageName = params['装备界面']
  96.     }else if(this instanceof Scene_Save || this instanceof  Scene_Load) {
  97.         imageName = params['存档界面']
  98.     }else{
  99.         imageName = params['其他界面']
  100.     }
  101.     this._backgroundSprite.bitmap=ImageManager.loadParallax(imageName);
  102.     this.addChild(this._backgroundSprite);
  103. };
  104.  
  105.  
  106. Window_MenuCommand.prototype.addOriginalCommands = function () {
  107.     this.addCommand(params['名称'], params['命令'],true);
  108. };
  109.  
  110. var _Scene_Menu_createCommandWindow = Scene_Menu.prototype.createCommandWindow;
  111. Scene_Menu.prototype.createCommandWindow = function () {
  112.     _Scene_Menu_createCommandWindow.call(this);
  113.  
  114.     this._commandWindow.setHandler(params['命令'], this.commandRename.bind(this));
  115. };
  116.  
  117. Scene_Menu.prototype.commandRename = function () {
  118.     this._statusWindow.setFormationMode(false);
  119.     this._statusWindow.selectLast();
  120.     this._statusWindow.activate();
  121.     this._statusWindow.setHandler('ok',     this.rename_ok.bind(this));
  122.     this._statusWindow.setHandler('cancel', this.rename_cancel.bind(this));
  123. };
  124. Scene_Menu.prototype.rename_ok = function() {
  125.     SceneManager.push(Scene_Name);
  126.     SceneManager.prepareNextScene($gameParty.menuActor()._actorId, 10);
  127. };
  128. Scene_Menu.prototype.rename_cancel = function() {
  129.     this._statusWindow.deselect();
  130.     this._commandWindow.activate();
  131. };
  132.  
  133. Window_MenuStatus.prototype.processOk = function() {
  134.     $gameParty.setMenuActor($gameParty.members()[this.index()]);
  135.     Window_Selectable.prototype.processOk.call(this);
  136. };




作者: 雪在燃    时间: 2017-11-2 21:52
bloodship 发表于 2017-11-2 21:37
对,就是你说的这个症状!
我练习一下,所以就改教程了。我想在插件界面选择图片就可以直接设置背景,不 ...

可以使用的吧,你具体要实现什么我还不是很清楚
这方面自己研究一下,具体的使用方法没有什么限定的
作者: bloodship    时间: 2017-11-2 22:19
雪在燃 发表于 2017-11-2 21:52
可以使用的吧,你具体要实现什么我还不是很清楚
这方面自己研究一下,具体的使用方法没有什么限 ...

我没学过编程,可能说的废话比较多还说的不清楚,大致情况是这样的:
我看系统自带的那个madewithmv的插件,可以选择替换那个madewithmv的图片,觉得很方便。
我就想把教程改成可以选择图片作为背景的。就这么写的
JAVASCRIPT 代码复制
  1. * @param 主菜单
  2. * @type file
  3. * @desc 主菜单背景使用的图片
  4. * @dir img\parallaxes



这样params里就是选择的图片了,可我看imagemanager他需要的是文件名。
我不知道究竟哪里错了,还是全错了。反正现在要么是不起作用,要么是黑的,要么就报错。

作者: 雪在燃    时间: 2017-11-2 22:36
bloodship 发表于 2017-11-2 22:19
我没学过编程,可能说的废话比较多还说的不清楚,大致情况是这样的:
我看系统自带的那个madewithmv的插件 ...

这里的选择应该只是方便使用而已
实际上参数里面存储的就是文件名
作者: 雪在燃    时间: 2017-11-2 22:42
bloodship 发表于 2017-11-2 21:01
改成这样了,没有报错,但是背景是黑色的,应该是没有选择到图
var params = PluginManager.parameters("ed ...
  1. /*:
  2. * @plugindesc test
  3. * @author test
  4. *
  5. * @param 标题画面的图片选择
  6. * @type file
  7. * @desc 标题画面的图片使用的图片
  8. * @dir img\parallaxes
  9. */
  10. (function () {
  11.     var parameters = PluginManager.parameters('test');
  12.     var name = String(parameters['主菜单'] || '');
  13.     Scene_Title.prototype.createBackground = function () {
  14.         this._backSprite1 = new Sprite(ImageManager.loadParallax(name));
  15.         this._backSprite2 = new Sprite(ImageManager.loadTitle2($dataSystem.title2Name));
  16.         this.addChild(this._backSprite1);
  17.         this.addChild(this._backSprite2);
  18.     };
  19. })();
复制代码

js的名字是test,这就是一个通过参数修改标题画面的脚本
剩下还有问题,就是脚本的逻辑出现了问题
作者: bloodship    时间: 2017-11-2 22:48
雪在燃 发表于 2017-11-2 22:36
这里的选择应该只是方便使用而已
实际上参数里面存储的就是文件名

教程里是这么写的:
this._backgroundSprite.bitmap=ImageManager.loadParallax("Mountains1");
我这么写对吗?
this._backgroundSprite.bitmap=ImageManager.loadParallax(params[主菜单]);
或者还是这样
MENUimage = String(parmas[主菜单]);
this._backgroundSprite.bitmap=ImageManager.loadParallax(MENUimage);
哪个对,还是都错了
作者: 汪汪    时间: 2017-11-5 20:26
本帖最后由 汪汪 于 2017-11-5 20:41 编辑

如果在脚本里调用图片,建议放到picture里,
在事件中调用一次 方便以后打包时 避免误删

JAVASCRIPT 代码复制下载
  1. /*:
  2. * @plugindesc test
  3. * @author test
  4. *
  5. * @param 主菜单
  6. * @desc 标题画面的图片使用的图片
  7. * @default 菜单
  8. */
  9. (function () {
  10. //这个是获test.js 这个插件  的所有参数,也就是参数组  赋予给 parameters 变量
  11. var parameters = PluginManager.parameters('test');
  12. //这个是获取参数组中  '主菜单'  这个的参数,把他赋予给 name 变量,
  13. //  String(xxx) 是为了转换为 字符串 ,其实一般不用转换也不会有问题..  
  14.     var name = String(parameters['主菜单'] || '');
  15.  
  16.     Scene_Title.prototype.createBackground = function () {
  17. //      ImageManager.loadParallax(name) 意思就是获取Parallax 文件夹中 名字为 name 这个变量的值 这个文件的 bitmap ,  
  18. //     new Sprite (xxx) 就是创建一个新精灵显示这个bitmap
  19.         this._backSprite1 = new Sprite(ImageManager.loadParallax(name));
  20.  
  21.         this._backSprite2 = new Sprite(ImageManager.loadTitle2($dataSystem.title2Name));
  22. //这一句是把这个精灵添加到场景中
  23.         this.addChild(this._backSprite1);
  24.         this.addChild(this._backSprite2);
  25.     };
  26. })();






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