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

Project1

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

[已经解决] 怎样隐藏掉对话窗口底部的箭头

[复制链接]

Lv5.捕梦者

梦石
0
星屑
26264
在线时间
5355 小时
注册时间
2016-3-8
帖子
1655
跳转到指定楼层
1
发表于 2020-8-13 17:01:55 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 alexncf125 于 2024-1-25 01:48 编辑


已经把箭头PS掉了,但我想在$game_switches[M5MC20140305::SWI]为true时用Window.png而,为false时用No▽Window.png
然而在脚本下方加入以下代码后却做不出上述的效果(脚本链接=>https://rpg.blue/home.php?mod=space&uid=291206&do=blog&id=12749)
  1. class Scene_Map < Scene_Base
  2.   alias m5_create_message_window create_message_window
  3.   def create_message_window
  4.     m5_create_message_window
  5.     if $game_switches[M5MC20140305::SWI]
  6.       @message_window.windowskin = Cache.system("Window")
  7.     else
  8.       @message_window.windowskin = Cache.system("No▽Window")
  9.     end
  10.   end
  11. end
复制代码

RUBY 代码复制
  1. =begin
  2.  
  3. ===============================================================================
  4.  
  5.   对话框光标 By喵呜喵5
  6.  
  7. ===============================================================================
  8.  
  9.  
  10. 【说明】
  11.  
  12.  
  13.   允许使用任意图片作为对话框下一句提示的光标
  14.  
  15.  
  16. =end
  17.  
  18. $m5script ||= {};$m5script[:M5MC20140305] = 20140305
  19.  
  20. module M5MC20140305
  21.  
  22. #==============================================================================
  23.  
  24. # 设定部分
  25.  
  26. #==============================================================================
  27.  
  28.  
  29.   FILENAME = "Cursor"
  30.  
  31.  
  32.   # 光标图片的文件名,放到Graphics\System文件夹下
  33.  
  34.  
  35.   FRAME = 4
  36.  
  37.  
  38.   # 光标图片的帧数,只有一张图片并且不需要动画效果这里填写1就好了
  39.  
  40.  
  41.   DURA = 10
  42.  
  43.  
  44.   # 光标播放动画效果时每张图片的持续时间
  45.  
  46.  
  47.   MODE = 1
  48.  
  49.  
  50.   # 光标显示模式,1表示固定位置,2表示跟随文字移动
  51.  
  52.  
  53.   #当光标显示模式为[固定位置]时:
  54.  
  55.  
  56.     POS1 = [491,387]
  57.  
  58.  
  59.     # 对话框居下时光标的[X,Y]坐标
  60.  
  61.  
  62.     POS2 = [491,239]
  63.  
  64.  
  65.     # 对话框居中时光标的[X,Y]坐标
  66.  
  67.  
  68.     POS3 = [491,91]
  69.  
  70.  
  71.     # 对话框居上时光标的[X,Y]坐标
  72.  
  73.  
  74.   #当光标显示模式为[随文字移动]时:
  75.  
  76.  
  77.     POSX = 12
  78.  
  79.  
  80.     # 光标在左右方向的偏移
  81.  
  82.  
  83.     POSY = 12
  84.  
  85.  
  86.     # 光标在上下方向的偏移
  87.  
  88.  
  89.  
  90.   Z = 201
  91.  
  92.  
  93.   # 光标的Z坐标,当光标遮住某些窗口时请尝试修改这里
  94.  
  95.  
  96.   SWI = 1
  97.  
  98.  
  99.   # 对应ID的开关打开的时候,不显示光标
  100.  
  101.  
  102. #==============================================================================
  103.  
  104. # 设定结束
  105.  
  106. #==============================================================================
  107.  
  108. class Sprite_MessageCursor < Sprite
  109.  
  110.   def initialize
  111.  
  112.     super(nil)
  113.  
  114.     self.z = Z
  115.  
  116.     self.bitmap = Cache.system(FILENAME)
  117.  
  118.     self.visible = false
  119.  
  120.     @duration = @frame = 0
  121.  
  122.     @width = self.bitmap.width / FRAME
  123.  
  124.     self.src_rect.set(@frame * @width, 0, @width, self.bitmap.height)
  125.  
  126.   end
  127.  
  128.   def update_placement(pos = 2)
  129.  
  130.     self.x,self.y = pos == 2 ? POS1 : (pos == 1 ? POS2 : POS3)
  131.  
  132.   end
  133.  
  134.   def update_placement_plus(orig,pos)
  135.  
  136.     self.x,self.y = orig
  137.  
  138.     self.x += pos[:x] + POSX
  139.  
  140.     self.y += pos[:y] + POSY
  141.  
  142.   end
  143.  
  144.   def update
  145.  
  146.     super
  147.  
  148.     return unless self.visible
  149.  
  150.     return @duration -= 1 if @duration > 0
  151.  
  152.     self.src_rect.set(@frame * @width, 0, @width, self.bitmap.height)
  153.  
  154.     @duration = DURA
  155.  
  156.     @frame = (@frame == FRAME - 1) ? 0 : @frame + 1
  157.  
  158.   end
  159.  
  160. end
  161.  
  162. end # M5MC20140305
  163.  
  164. class Window_Message
  165.  
  166.   alias m5_20140305_initialize initialize
  167.  
  168.   def initialize
  169.  
  170.     m5_20140305_initialize
  171.  
  172.     @m5_20140305_cursor = M5MC20140305::Sprite_MessageCursor.new
  173.  
  174.   end
  175.  
  176.   alias m5_20140305_dispose dispose
  177.  
  178.   def dispose
  179.  
  180.     m5_20140305_dispose
  181.  
  182.     @m5_20140305_cursor.dispose
  183.  
  184.   end
  185.  
  186.   alias m5_20140305_update update
  187.  
  188.   def update
  189.  
  190.     m5_20140305_update
  191.  
  192.     @m5_20140305_cursor.update
  193.  
  194.     return @m5_20140305_cursor.visible = false unless self.open?
  195.  
  196.     @m5_20140305_cursor.visible = self.pause
  197.  
  198.     @m5_20140305_cursor.visible = false if $game_switches[M5MC20140305::SWI]
  199.  
  200.   end
  201.  
  202.   if M5MC20140305::MODE == 1
  203.  
  204.     alias m5_20140305_update_placement update_placement
  205.  
  206.     def update_placement
  207.  
  208.       m5_20140305_update_placement
  209.  
  210.       @m5_20140305_cursor.update_placement(@position)
  211.  
  212.     end
  213.  
  214.   else # M5MC20140305::MODE != 1
  215.  
  216.     alias m5_20140416_new_page new_page
  217.  
  218.     def new_page(text, pos)
  219.  
  220.       m5_20140416_new_page(text, pos)
  221.  
  222.       @m5_20140305_cursor.update_placement_plus([self.x,self.y],pos)
  223.  
  224.     end
  225.  
  226.     alias m5_20140416_process_normal_character process_normal_character
  227.  
  228.     def process_normal_character(c, pos)
  229.  
  230.       m5_20140416_process_normal_character(c, pos)
  231.  
  232.       @m5_20140305_cursor.update_placement_plus([self.x,self.y],pos)
  233.  
  234.     end
  235.  
  236.     alias m5_20140416_process_draw_icon process_draw_icon
  237.  
  238.     def process_draw_icon(icon_index, pos)
  239.  
  240.       m5_20140416_process_draw_icon(icon_index, pos)
  241.  
  242.       @m5_20140305_cursor.update_placement_plus([self.x,self.y],pos)
  243.  
  244.     end
  245.  
  246.   end
  247.  
  248. end
  249.  
  250. #以下是我加的部份
  251. class Scene_Map < Scene_Base
  252.   alias m5_create_message_window create_message_window
  253.   def create_message_window
  254.     m5_create_message_window
  255.     if $game_switches[M5MC20140305::SWI]
  256.       @message_window.windowskin = Cache.system("Window")
  257.     else
  258.       @message_window.windowskin = Cache.system("No▽Window")
  259.     end
  260.   end
  261. end

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21631
在线时间
9414 小时
注册时间
2012-6-19
帖子
7118

开拓者短篇九导演组冠军

来自 4楼
发表于 2020-8-14 00:10:32 | 只看该作者
本帖最后由 喵呜喵5 于 2020-8-14 00:14 编辑

Scene_Map 的 create_message_window 只有在地图界面打开时才会调用一次,所以如果你始终停留在地图上,那这么写代码并不能满足你的需求
所以思路就变成了在一个每次打开对话框都会执行的方法里面增加修改对话框皮肤的逻辑
于是可以找到 Window_Message 的 update_placement 方法:

  1. class Window_Message
  2.   alias m5_20200813_update_placement update_placement
  3.   def update_placement
  4.     m5_20200813_update_placement
  5.     if $game_switches[M5MC20140305::SWI]
  6.       self.windowskin = Cache.system("Window")
  7.     else
  8.       self.windowskin = Cache.system("No▽Window")      
  9.     end
  10.   end
  11. end
复制代码


不过,在某些情况下,update_placement 也并不能满足你的实际需求,具体从代码上来说,update_placement 并不是每“句”对话都执行一次,而是每“段”对话都执行一次,如果前后两句对话的位置、对话框背景这些属性都相同时,它们会被视作同一段对话,第二句对话播放前是不会执行 update_placement 的,所以如下图所示的事件配法并不会按照你的预期来显示



最简单粗暴的做法就是,靠一个等待指令将第一句对话和第二句对话拆分成两段对话



另一种做法是不在 update_placement 这种每段话执行的方法后面增加逻辑,而是直接在 new_page 这种每句对话都会执行的方法里刷新对话框的皮肤

  1. class Window_Message
  2.   alias m5_20200813_new_page new_page
  3.   def new_page
  4.     m5_20200813_new_page
  5.     if $game_switches[M5MC20140305::SWI]
  6.       self.windowskin = Cache.system("Window")
  7.     else
  8.       self.windowskin = Cache.system("No▽Window")      
  9.     end
  10.   end
  11. end
复制代码


评分

参与人数 1+1 收起 理由
alexncf125 + 1 精品文章

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

梦石
18
星屑
12191
在线时间
2049 小时
注册时间
2012-12-12
帖子
541
2
发表于 2020-8-13 22:01:19 | 只看该作者
应该贴上喵5的对话框光标脚本……或者链接。
总之翻了一下,喵5的对话框光标脚本用的不是window的小箭头吧?是单独的箭头文件。不知道你用的究竟是哪个脚本……

葱兔の游戏列表 (´・ω・`)
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
26264
在线时间
5355 小时
注册时间
2016-3-8
帖子
1655
3
 楼主| 发表于 2020-8-13 22:15:22 | 只看该作者
本帖最后由 alexncf125 于 2020-8-13 22:17 编辑
congwsbn 发表于 2020-8-13 22:01
应该贴上喵5的对话框光标脚本……或者链接。
总之翻了一下,喵5的对话框光标脚本用的不是window的小箭头吧 ...


我发帖时有附上链接的说...被DZ吃掉了...

其实与喵5的脚本没什么关系(即是可无视1L的內容,直接看"以下")

以下:

我只是想当某开关为true时
Window_Message的windowskin用Window.png

当某开关为false时
Window_Message的windowskin用No▽Window.png而已
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
26264
在线时间
5355 小时
注册时间
2016-3-8
帖子
1655
5
 楼主| 发表于 2020-8-14 05:48:10 | 只看该作者
本帖最后由 alexncf125 于 2020-8-17 21:46 编辑
喵呜喵5 发表于 2020-8-14 00:10
Scene_Map 的 create_message_window 只有在地图界面打开时才会调用一次,所以如果你始终停留在地图上,那 ...


谢谢喵5大大悉心指导,涨知识了
您显浅易明的教导能很好地理解
对我这小白来说简直是帮大忙了
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 06:55

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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