Project1

标题: 自定义弹窗内容的方法? [打印本页]

作者: asukalin    时间: 2021-9-18 03:47
标题: 自定义弹窗内容的方法?
本帖最后由 asukalin 于 2021-9-18 03:52 编辑

之前说过,我想在游戏里做一个事项清单:
https://rpg.blue/thread-487126-1-1.html

现在参考了教学贴
https://rpg.blue/thread-386506-1-1.html
里的方法,做成了弹窗



但这个弹窗里的“清单”内容,其实是直接写在脚本文件里的……

JAVASCRIPT 代码复制
  1. function Window_Testing() {
  2.     this.initialize.apply(this, arguments);
  3. }
  4. Window_Testing.prototype = Object.create(Window_Selectable.prototype);
  5. Window_Testing.prototype.initialize = function(x, y, width, height) {
  6.     Window_Selectable.prototype.initialize.call(this, x, y, width, height);
  7. }
  8.  
  9. function Scene_Testing() {
  10.     this.initialize.apply(this, arguments);
  11. }
  12. Scene_Testing.prototype = Object.create(Scene_MenuBase.prototype);
  13. Scene_Testing.prototype.initialize = function() {
  14.     Scene_MenuBase.prototype.initialize.call(this);
  15. };
  16. Scene_Testing.prototype.create = function() {
  17. Scene_MenuBase.prototype.create.call(this);
  18.     this._commandWindow = new Window_Testing(144, 96, 528, 432);
  19. this.addWindow(this._commandWindow);
  20. }
  21. Scene_Testing.prototype.update = function() {
  22.     if (Input.isTriggered('escape') || Input.isTriggered('cancel') || Input.isTriggered('ok') || TouchInput.isTriggered()) {
  23.         this._commandWindow.hide();
  24.         SceneManager.goto(Scene_Map);
  25.     }
  26. };
  27.  
  28. Window_Testing.prototype.initialize = function(x, y, width, height) {
  29.     Window_Selectable.prototype.initialize.call(this, x, y, width, height);
  30.     this.drawSomeText();
  31. }
  32.  
  33. Window_Testing.prototype.drawSomeText = function() {
  34.     var textW = 488;
  35.     var textH = 0;
  36.     this.drawText("我必须要完成的事", 0, textH, textW, 'center');
  37.     textH += this.lineHeight();
  38.     this.drawText(" ", 0, textH, textW, 'left');
  39.     textH += this.lineHeight();
  40.     this.drawText("  1. 第一项", 0, textH, textW, 'left');
  41.     textH += this.lineHeight();
  42.     this.drawText("  2. 第二项", 0, textH, textW, 'left');
  43.     textH += this.lineHeight();
  44.     this.drawText("  3. 第三项", 0, textH, textW, 'left');
  45.     textH += this.lineHeight();
  46.     this.drawText("  4. 第四项", 0, textH, textW, 'left');
  47.     textH += this.lineHeight();
  48.     this.drawText("  5. 第五项", 0, textH, textW, 'left');
  49.     textH += this.lineHeight();
  50.     this.drawText("  6. 第六项", 0, textH, textW, 'left');
  51.     textH += this.lineHeight();
  52.     this.drawText("  7. 第七项", 0, textH, textW, 'left');
  53.     textH += this.lineHeight();
  54.     this.drawText(" ", 0, textH, textW, 'left');
  55.     textH += this.lineHeight();
  56.     this.drawText("试着赶在七天之内,全部涂红吧", 0, textH, textW, 'right');
  57. }


就像教学贴里做的那样。
我不懂JavaScript,只能在原贴的代码上小改几个地方。

我想实现的效果是:
1. 能够像在事件编辑器里面那样随意编辑文本的样式,例如,最后一行单独让“涂红”二字变红或变大。如果还能插入emo图标就更棒了。
2. 随着剧情发展、“任务完成”,列表的文本内容可以变化。


听起来,似乎很基础吧?……
可惜我是萌新,又不懂JavaScript,现在就已经不知道下一步该怎么走了。
作者: 任小雪    时间: 2021-9-18 13:26
我的猜测:window是部分和画面,
而scene是总控和具体运作(各个scene之间互相排斥,即开这一个,要先关掉另一个),
而manage又控制着各个scene的开与关。

嗯,都是猜测,俺寻思

作者: 小怪兽奇奇侠    时间: 2021-9-18 16:35
游戏画风很喜欢
作者: asukalin    时间: 2021-9-20 03:56
帖子要沉了

作者: asukalin    时间: 2021-9-20 04:28
“根据变量,动态调整弹窗显示的信息内容”似乎没有想象中那么容易实现……
RM的弹窗上的文字似乎都是静态的
如果要根据情况显示不同的内容……就要做好几个规格相同、内容稍有不同的弹窗,给玩家带来“内容会变”的错觉?

看来只能在站内找找这方面的弹窗插件了……
RM太糟糕了,怎么连这么简单的功能都没有

作者: asukalin    时间: 2021-9-21 04:42
本帖最后由 asukalin 于 2021-9-21 05:01 编辑

我傻了……
刚刚才想起,JavaScript是编程语言……

2. 随着剧情发展、“任务完成”,列表的文本内容可以变化。

直接在脚本文件里来一个条件语句,就能实现
  1. if ($gameSwitches.value(5)) {
  2.     this.drawText("  1. 第一项【已完成】", 0, textH, textW, 'left');
  3. }
  4. else {
  5.     this.drawText("  1. 第一项", 0, textH, textW, 'left');
  6. }
复制代码

之前居然没想到可以用条件语句,实在太傻了
我去面壁一会儿

作者: asukalin    时间: 2021-9-21 04:57
本帖最后由 asukalin 于 2021-9-21 05:01 编辑
1. 能够像在事件编辑器里面那样随意编辑文本的样式,例如,最后一行单独让“涂红”二字变红或变大。如果还能插入emo图标就更棒了。

这个我还没搞出来

  1. this.drawText("试着赶在七天之内,全部" + "涂红".fontcolor('red') + "吧", 0, textH, textW, 'right');
复制代码

直接这样子不行……
作者: asukalin    时间: 2021-9-21 10:08
本帖最后由 asukalin 于 2021-9-21 10:22 编辑
1. 能够像在事件编辑器里面那样随意编辑文本的样式,例如,最后一行单独让“涂红”二字变红或变大。如果还能插入emo图标就更棒了。

已解决。
  1. this.drawTextEx("试着赶在七天之内,全部\\C[2]涂红\\C[0]吧", 0, textH)
复制代码

使用drawTextEx方法而不是drawText,就可以跟在事件编辑器里一样,直接使用\C[2]和\{之类的标记了。
(但是要多打一个反斜杠)

参考:https://rpg.blue/thread-478187-1-1.html
作者: 任小雪    时间: 2021-9-28 02:24
◆改变物品颜色脚本(全游戏并行处理即可):
Window_Base.prototype.drawItemName = function(item, x, y, width) {
    width = width || 312;
    if (item) {
        var iconBoxWidth = Window_Base._iconWidth + 4;
this.changeTextColor(this.textColor(item.meta.color));
        this.drawIcon(item.iconIndex, x + 2, y + 2);
        this.drawText(item.name, x + iconBoxWidth, y, width - iconBoxWidth);
    }
};
◆注释:物品文字颜色
◆注释:this.changeTextColor(this.textColor(item.meta.color));(这句把原引擎中的默认物品颜色为白色的代码替换了,其他都是原文)
:  :这句里面,item代表data里面的物品(包括武器装备的数据),
:  :meta指标签(建议写在注释备注栏里,否则可能不生效,标签符号是<>),
:  :color指标签<>里面的color:里面的具体数据

物品的注释备注部分是下面这样的(例子而已,汉字是多余的,存在或删掉都不影响):
金木水火土水
<color:1>这是蓝色,跟我们对话框写的\c[1]一个意思
金木水火土水
作者: 任小雪    时间: 2021-11-23 07:59
尝试了drawFace,然后发现必须运行一次自身或者菜单,图片才会开始显示,啧




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