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

Project1

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

[交流讨论] 自定义弹窗内容的方法?

[复制链接]

Lv4.逐梦者

梦石
8
星屑
2882
在线时间
555 小时
注册时间
2021-8-13
帖子
625

极短25获奖

跳转到指定楼层
1
发表于 2021-9-18 03:47:00 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 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,现在就已经不知道下一步该怎么走了。
夜空晴朗,星光璀璨,我只顾低着头走,看不见半点别人嘴上说的美丽。
———————————————————
> 不是作家
> 不是孤岛的概念DEMO
> 想和妳一起过生日
> 一名虚无主义者的婚礼
> 杀之不尽死而复生无止无终不可阻挡

Lv3.寻梦者

梦石
0
星屑
2866
在线时间
446 小时
注册时间
2016-9-26
帖子
1223
2
发表于 2021-9-18 13:26:37 | 只看该作者
我的猜测:window是部分和画面,
而scene是总控和具体运作(各个scene之间互相排斥,即开这一个,要先关掉另一个),
而manage又控制着各个scene的开与关。

嗯,都是猜测,俺寻思
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
11180
在线时间
2066 小时
注册时间
2013-6-10
帖子
1516
3
发表于 2021-9-18 16:35:12 | 只看该作者
游戏画风很喜欢
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
8
星屑
2882
在线时间
555 小时
注册时间
2021-8-13
帖子
625

极短25获奖

4
 楼主| 发表于 2021-9-20 03:56:26 | 只看该作者
帖子要沉了
夜空晴朗,星光璀璨,我只顾低着头走,看不见半点别人嘴上说的美丽。
———————————————————
> 不是作家
> 不是孤岛的概念DEMO
> 想和妳一起过生日
> 一名虚无主义者的婚礼
> 杀之不尽死而复生无止无终不可阻挡
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
8
星屑
2882
在线时间
555 小时
注册时间
2021-8-13
帖子
625

极短25获奖

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

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

点评

好像是有刷新设定的,再抄抄?  发表于 2021-9-20 12:33
夜空晴朗,星光璀璨,我只顾低着头走,看不见半点别人嘴上说的美丽。
———————————————————
> 不是作家
> 不是孤岛的概念DEMO
> 想和妳一起过生日
> 一名虚无主义者的婚礼
> 杀之不尽死而复生无止无终不可阻挡
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
8
星屑
2882
在线时间
555 小时
注册时间
2021-8-13
帖子
625

极短25获奖

6
 楼主| 发表于 2021-9-21 04:42:43 | 只看该作者
本帖最后由 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. }
复制代码

之前居然没想到可以用条件语句,实在太傻了
我去面壁一会儿
夜空晴朗,星光璀璨,我只顾低着头走,看不见半点别人嘴上说的美丽。
———————————————————
> 不是作家
> 不是孤岛的概念DEMO
> 想和妳一起过生日
> 一名虚无主义者的婚礼
> 杀之不尽死而复生无止无终不可阻挡
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
8
星屑
2882
在线时间
555 小时
注册时间
2021-8-13
帖子
625

极短25获奖

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

这个我还没搞出来

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

直接这样子不行……
夜空晴朗,星光璀璨,我只顾低着头走,看不见半点别人嘴上说的美丽。
———————————————————
> 不是作家
> 不是孤岛的概念DEMO
> 想和妳一起过生日
> 一名虚无主义者的婚礼
> 杀之不尽死而复生无止无终不可阻挡
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
8
星屑
2882
在线时间
555 小时
注册时间
2021-8-13
帖子
625

极短25获奖

8
 楼主| 发表于 2021-9-21 10:08:06 | 只看该作者
本帖最后由 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-22 00:12
有一个问题,textex相比于text,不能自动缩小文字字体大小(指涉及装备品质颜色的情况)  发表于 2021-9-22 00:10
夜空晴朗,星光璀璨,我只顾低着头走,看不见半点别人嘴上说的美丽。
———————————————————
> 不是作家
> 不是孤岛的概念DEMO
> 想和妳一起过生日
> 一名虚无主义者的婚礼
> 杀之不尽死而复生无止无终不可阻挡
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2866
在线时间
446 小时
注册时间
2016-9-26
帖子
1223
9
发表于 2021-9-28 02:24:07 | 只看该作者
◆改变物品颜色脚本(全游戏并行处理即可):
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-9-28 02:24
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2866
在线时间
446 小时
注册时间
2016-9-26
帖子
1223
10
发表于 2021-11-23 07:59:18 | 只看该作者
尝试了drawFace,然后发现必须运行一次自身或者菜单,图片才会开始显示,啧
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-29 05:33

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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