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

Project1

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

[已经解决] 关于CASE语句的疑问

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
85 小时
注册时间
2011-3-6
帖子
45
跳转到指定楼层
1
发表于 2016-12-18 23:55:15 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
想改显示文字的行数
于是找了很久脚本
然后试着把Window_Message第50行处的修改为了
RUBY 代码复制
  1. def visible_line_number
  2.     return 20
  3.   end



但是后来发现 改了这个是不能再改的
改成20 就不能再变
加上IF 或者case 也没用
有人知道怎么设置可以控制的文字行数吗

评分

参与人数 1星屑 +50 收起 理由
VIPArcher + 50 结贴

查看全部评分

Lv2.观梦者

梦石
0
星屑
644
在线时间
830 小时
注册时间
2016-7-24
帖子
649

开拓者

2
发表于 2016-12-19 06:33:42 | 只看该作者
return 4 代表結束返回值4
所以你可以考慮用二元式判斷





或是後置式,這邊會從1號開關檢查到3號如果都不符會傳回最下面沒條件的 return 4

点评

试了下似乎也不行 我测试的时候这里改数字 他只会一开始检测一次;之后再改变量或者开关它也不会读第二次了  发表于 2016-12-19 10:48
2016/07/17 加入RPG製作,勿忘初衷!
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
6901
在线时间
7028 小时
注册时间
2013-11-2
帖子
1344

开拓者剧作品鉴家

3
发表于 2016-12-19 09:45:53 | 只看该作者
讯息窗口在生成之后,大小是没那么容易随便改的。visible_line_number方法所返回的数值只供生成窗口时使用
你可以发现visible_line_number只有在initialize(类实例生成时所调用的一次性方法)内调用。

因此,我写了下面这个插件脚本:

RUBY 代码复制
  1. class Window_Message < Window_Base
  2.  
  3.   def resize_window(lines = 4)
  4.     return if lines <= 0
  5.     self.height = fitting_height(lines)
  6.     create_contents
  7.   end  
  8.  
  9. end
  10.  
  11. class Game_Interpreter
  12.  
  13.     def resize_message_window(lines = 4)
  14.         w = SceneManager.scene.instance_variable_get(:@message_window)
  15.         return if !w
  16.         w.resize_window(lines)
  17.         w.update_placement
  18.     end
  19.  
  20. end


我给Window_Message加了一个方法,叫做resize_window(重新定义大小),参数是想要的新行数。默认参数是4,这样的直接调用resize_window不附上参数也可以,直接就是默认值。
return if lines <= 0 如果新行数为零或负数就返回,避免之后出现什么巨大错误。(你也可以移除这行,到时就会报错,可能会更好修正)
self.height = fitting_height(lines) 这行你在initialize内有看到 super(0,0,window_width,window_height)而window_height的定义是fitting_height(visible_line_number),所以应该不难理解。
create_contents 就是重新生成内容区域(其实是个图片)。这是必要的,不然会出现框弄大了可是内容仍然小的问题。

定义了这个方法之后,问题就来了。怎么调用
如果你是有写别的脚本的,就记得调用这个新方法就是了。
如果是要从事件内透过脚本指令来调用…就在Game_Interpreter里面定义一个方法resize_message_window,参数也是那个样。
在Game_Interpreter里面所定义的方法可以直接被事件脚本指令调用。直接写 resize_message_window(20) 这样就行了。

w = SceneManager.scene.instance_variable_get(:@message_window) 这行是这么理解的:
SceneManager.scene是当前场景(不管是地图Scene_Map或者战斗Scene_Battle),instance_variable_get是一个黑科技方法,用于直接获取实例内的变量。:@message_window 就是指定要获取场景内讯息窗口的实例。
return if !w 如果窗口获取失败,得到的值是nil(空值),就返回,避免接下来的步骤出错。
w.resize_window(lines) 调用上面所说的,新定义的方法,调整显示的行数。
w.update_placement 调整窗口的坐标(可以去Window_Message看看定义),因为你调整了高度你总得把Y坐标给提高吧,不然?你移除这行试试看咯~

以上。脚本是很神奇的事物,建议阅读本区置顶的汉化版F1帮助文档内的脚本入门,然后阅读默认脚本内的绿色注释,至少要知道哪个方法是干啥的。

点评

理解錯問題了 原來是要對話中改視窗!  发表于 2016-12-19 11:35
写的很详细,蟹蟹!  发表于 2016-12-19 10:40

评分

参与人数 2星屑 +30 梦石 +1 收起 理由
VIPArcher + 1 认可答案
QQ蚊子湯 + 30 精品文章

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
85 小时
注册时间
2011-3-6
帖子
45
4
 楼主| 发表于 2016-12-19 10:29:33 | 只看该作者
RaidenInfinity 发表于 2016-12-19 09:45
讯息窗口在生成之后,大小是没那么容易随便改的。visible_line_number方法所返回的数值只供生成窗口时使用 ...

哦哦感谢(字有点多先回复了慢慢看w
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 03:47

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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