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

Project1

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

[已经解决] 如何实现不同窗口调用不同的窗口皮肤?

[复制链接]

Lv3.寻梦者

梦石
3
星屑
65
在线时间
200 小时
注册时间
2008-7-8
帖子
180
跳转到指定楼层
1
发表于 2015-8-6 15:31:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
想给对话框用一个特色的非均匀平铺效果皮肤,更换后发现其他窗口也同时使用了这个皮肤,各种拉伸比例共存极其难看。
在脚本编辑器的Window_base中找到了下面这段
RUBY 代码复制
  1. def initialize(x, y, width, height)
  2.     super
  3.     self.windowskin = Cache.system("Window")
  4.     update_padding
  5.     update_tone
  6.     create_contents
  7.     @opening = @closing = false
  8.   end

所有窗口都是调用的Window_base里初始化中读取的缓存文件,也就是我替换掉的window.png
来到Window_Message(这应该是对话窗口对应的类吧?),想在它的初始化语句中加入一条类似"self.windowskin = Cache.system("WindowMessage")"的语句实现独立读取一个新的素材文件的功能,但是发现它的初始化语句是
RUBY 代码复制
  1. def initialize
  2.     super(0, 0, window_width, window_height)
  3.     self.z = 200
  4.     self.openness = 0
  5.     create_all_windows
  6.     create_back_bitmap
  7.     create_back_sprite
  8.     clear_instance_variables
  9.   end

使用了super语句,往上翻到父类Base的初始化语句(就是第一段),发现里面也有个super,这里调用的Window的初始化语句似乎并没有出现在脚本编辑器里。。。
所以应该怎么办?刚学脚本半天,好多东西还没弄太懂...

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

2
发表于 2015-8-6 15:36:57 | 只看该作者
在 super 下面加上 self.windowskin = Cache.system("WindowMessage") 就是了
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
3
星屑
65
在线时间
200 小时
注册时间
2008-7-8
帖子
180
3
 楼主| 发表于 2015-8-6 15:43:45 | 只看该作者
靠,直接把语句加进去试用发现可以了。
但是观察了一下发现从语句上来讲这个做法还是不严密的吧
这次没出问题只是因为Message的初始化中没有对图片进行太大的改变,即造成了
"super(0, 0, window_width, window_height)"

"self.windowskin = Cache.system("Window")"
并没什么区别

所以虽然我现在这个问题因为运气好而解决了,还是希望大家能给出真正的解决方案,比如找到Window类中初始化语句什么的
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
22953
在线时间
8638 小时
注册时间
2011-12-31
帖子
3367
4
发表于 2015-8-6 15:50:20 | 只看该作者
參考
ウィンドウスキン個別設定
http://a1tktk.web.fc2.com/scripts_page/custom_window_skin.html
回想領域 ウィンドウスキン変更
http://kaisou-ryouiki.sakura.ne.jp/
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
3
星屑
65
在线时间
200 小时
注册时间
2008-7-8
帖子
180
5
 楼主| 发表于 2015-8-6 16:02:08 | 只看该作者
tseyik 发表于 2015-8-6 15:50
參考
ウィンドウスキン個別設定
http://a1tktk.web.fc2.com/scripts_page/custom_window_skin.html

上面的全是乱码,下面日文也看不大懂说的啥...(´゚Д゚`)
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
3
星屑
65
在线时间
200 小时
注册时间
2008-7-8
帖子
180
6
 楼主| 发表于 2015-8-6 16:13:08 | 只看该作者
taroxd 发表于 2015-8-6 15:36
在 super 下面加上 self.windowskin = Cache.system("WindowMessage") 就是了

刚刚看到你回复之前我自己尝试了下确实可以
但怎么想都不是最严谨的方法
如果第三层初始化中的"super(a,b,c,d)"对图片有所修改的话,那在它之后加入的图片就没有被这个语句修改

点评

是严谨的方法。从 Cache 中读出的图片本来就不应该做任何修改。  发表于 2015-8-7 20:04
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

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

开拓者短篇九导演组冠军

7
发表于 2015-8-7 19:51:27 | 只看该作者
  1. class Window_Base
  2.   alias m5_20150807_initialize initialize
  3.   def initialize *args
  4.     m5_20150807_initialize *args
  5.    
  6.     file = "Window2" if self.is_a? Window_Gold
  7.     file = "Window3" if self.is_a? Window_MenuCommand
  8.     file = "文件名"  if self.is_a? 窗口的类   
  9.    
  10.     self.windowskin = Cache.system file || "Window"
  11.   end
  12. end
复制代码
全局搜索,把所有其他修改窗口皮肤的代码删了,插入这段脚本,通过这段脚本修改各个窗口的皮肤
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
3
星屑
65
在线时间
200 小时
注册时间
2008-7-8
帖子
180
8
 楼主| 发表于 2015-8-7 20:52:33 | 只看该作者
喵呜喵5 发表于 2015-8-7 19:51
全局搜索,把所有其他修改窗口皮肤的代码删了,插入这段脚本,通过这段脚本修改各个窗口的皮肤 ...

谢谢 google了半天才看懂
帮助文档的搜索功能真是一点用都没有
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
198 小时
注册时间
2011-7-28
帖子
120
9
发表于 2015-8-8 02:50:55 | 只看该作者
找到了多窗口外观的脚本,是在~6R里找到的,但是不知道为啥本站搜名字搜不到了~
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2. #使用方法:事件内用脚本指令, 打入
  3. #       change_windowskin("素材名称")
  4. #回复默认:
  5.        #change_windowskin
  6. #--------------------------------------------------------------------------
  7.  
  8.  
  9. $default_winskin = "Window" # 默认窗口外观
  10.  
  11. class Game_Interpreter
  12. #--------------------------------------------------------------------------
  13. # ● 更改窗口外观
  14. #--------------------------------------------------------------------------
  15. def change_windowskin(winskin=nil)
  16.    if winskin
  17.      # 设定素材名称
  18.      $game_system.windowskin_name = winskin
  19.    else
  20.      # 回复默认名称
  21.      $game_system.windowskin_name = $default_winskin
  22.    end
  23.    return true
  24. end
  25. end
  26.  
  27. class Game_System
  28. #--------------------------------------------------------------------------
  29. # ● 获取窗口外观名称
  30. #--------------------------------------------------------------------------
  31. def windowskin_name
  32.    if @windowskin_name == nil
  33.      return $default_winskin
  34.    else
  35.      return @windowskin_name
  36.    end
  37. end
  38. #--------------------------------------------------------------------------
  39. # ● 更改窗口外观名称
  40. #--------------------------------------------------------------------------
  41. def windowskin_name=(winskin)
  42.    @windowskin_name = winskin
  43. end
  44. end
  45.  
  46. class Window_Base < Window
  47. #--------------------------------------------------------------------------
  48. # ● 初始化窗口
  49. #--------------------------------------------------------------------------
  50. alias winskin_initialize initialize
  51. def initialize(x, y, width, height)
  52.    winskin_initialize(x, y, width, height)
  53.    @windowskin_name = $game_system.windowskin_name
  54.    self.windowskin = Cache.system(@windowskin_name)
  55. end
  56. #--------------------------------------------------------------------------
  57. # ● 更新窗口
  58. #--------------------------------------------------------------------------
  59. alias winskin_update update
  60. def update
  61.    winskin_update
  62.    if $game_system.windowskin_name != @windowskin_name
  63.      @windowskin_name = $game_system.windowskin_name
  64.      self.windowskin = Cache.system(@windowskin_name)
  65.    end
  66. end
  67. end
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
22953
在线时间
8638 小时
注册时间
2011-12-31
帖子
3367
10
发表于 2015-8-8 09:25:16 | 只看该作者
本帖最后由 tseyik 于 2015-8-8 09:28 编辑

Message Background
v.1.0
可用関数設定用不用圖片做对话框背景(預設開関1)
可在事件劇本中指定圖片做对话框背景
例:msgbg("MsgImage2", -98)
範例http://download1003.mediafire.co ... ackground+v.1.0.zip
  1. #------------------------------------------------------------------------------#
  2. #  Galv's Message Background
  3. #------------------------------------------------------------------------------#
  4. #  For: RPGMAKER VX ACE
  5. #  Version 1.0
  6. #------------------------------------------------------------------------------#
  7. #  2012-12-02 - version 1.0 - release
  8. #------------------------------------------------------------------------------#
  9. #  This script displays an image file for a message background instead of using
  10. #  the windowskin. If you are using Galv's Message Busts put this script ABOVE.
  11. #
  12. #  This image background will not stretch to fit, that's not it's purpose.
  13. #  The graphics are ugly, yes - that's so you make your own!
  14. #------------------------------------------------------------------------------#
  15. #  INSTRUCTIONS:
  16. #  Put in script list below Materials and above Main.
  17. #
  18. #  Read the instructions
  19. #------------------------------------------------------------------------------#
  20. #  SCRIPT CALL
  21. #------------------------------------------------------------------------------#
  22. #  
  23. #  msgbg("ImageName", y_offset)     # To change message background during game
  24. #                                   # "ImageName" is the new file name to use
  25. #                                   # y_offset is the new IMAGE_Y for that bg
  26. #  EXAMPLE
  27. #  msgbg("MsgImage", -98)      
  28. #
  29. #------------------------------------------------------------------------------#

  30. ($imported ||= {})["Galvs_Message_Background"] = true
  31. module Galv_Msgbg

  32. #------------------------------------------------------------------------------#
  33. #  SCRIPT SETTINGS
  34. #------------------------------------------------------------------------------#

  35.   # DEFAULT MESSAGE #
  36.   
  37.   MESSAGE_IMAGE = "MsgImage"   # Name of image in /Graphics/System to use for
  38.                                # the message background.

  39.   IMAGE_Y = -98                # Y offset of image

  40.   DISABLE_SWITCH = 1   # Turn swith ON to disable image background
  41.   
  42.   
  43.   
  44. #------------------------------------------------------------------------------#
  45. #  END SCRIPT SETTINGS
  46. #------------------------------------------------------------------------------#

  47. end


  48. class Window_Message < Window_Base
  49.   
  50.   alias galv_msgbg_window_create_back_bitmap create_back_bitmap
  51.   def create_back_bitmap
  52.     @bg = Sprite.new if @bg.nil?
  53.     if !$game_message.message_bg.nil?
  54.       @bg.bitmap = Cache.system($game_message.message_bg)
  55.       @current_bg = $game_message.message_bg
  56.     end
  57.     @bg.z = z - 1
  58.     @bg.opacity = 0
  59.     galv_msgbg_window_create_back_bitmap
  60.   end
  61.   
  62.   alias galv_msgbg_window_dispose dispose
  63.   def dispose
  64.     galv_msgbg_window_dispose
  65.     dispose_msgbg
  66.   end
  67.   
  68.   def dispose_msgbg
  69.     @bg.dispose if [email protected]?
  70.     @bg.bitmap.dispose if [email protected]?
  71.   end
  72.   
  73.   alias galv_msgbg_window_update_back_sprite update_back_sprite
  74.   def update_back_sprite
  75.     if !$game_switches[Galv_Msgbg::DISABLE_SWITCH]
  76.       update_msgbg if openness > 0
  77.       @bg.opacity = 0 if openness == 0
  78.     else
  79.       galv_msgbg_window_update_back_sprite
  80.       @bg.opacity = 0
  81.     end
  82.     @bg.update
  83.     @back_sprite.update
  84.   end
  85.   
  86.   def update_msgbg
  87.     if $game_message.message_bg != @current_bg
  88.       if !$game_message.message_bg.nil?
  89.         @bg.bitmap = Cache.system($game_message.message_bg)
  90.         @current_bg = $game_message.message_bg
  91.       end
  92.     end
  93.     @bg.y = self.y + $game_message.message_bg_y
  94.     @bg.opacity = openness
  95.     @back_sprite.visible = false
  96.     @back_sprite.opacity = 0
  97.     self.opacity = 0
  98.   end
  99.   
  100.   alias galv_msgbg_window_update_background update_background
  101.   def update_background
  102.     galv_msgbg_window_update_background
  103.     return if !$game_switches[Galv_Msgbg::DISABLE_SWITCH]
  104.   end
  105. end # Window_Message < Window_Base


  106. class Game_Message
  107.   attr_accessor :message_bg
  108.   attr_accessor :message_bg_y
  109.   
  110.   alias galv_msgbg_message_initialize initialize
  111.   def initialize
  112.     galv_msgbg_message_initialize
  113.     @message_bg = Galv_Msgbg::MESSAGE_IMAGE
  114.     @message_bg_y = Galv_Msgbg::IMAGE_Y
  115.   end
  116. end # Game_Message


  117. class Game_Interpreter
  118.   def msgbg(image,y_offset)
  119.     $game_message.message_bg = image
  120.     $game_message.message_bg_y = y_offset
  121.   end
  122. end # Game_Interpreter
复制代码
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 15:35

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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