Project1

标题: 关于RMVA改变窗口大小的问题 [打印本页]

作者: Jousun    时间: 2014-10-29 15:53
标题: 关于RMVA改变窗口大小的问题
这个是调整窗口大小的一段代码,我从整合系统里得来的,使用后进入游戏,窗口可成功修改,但是游戏窗口不居中,请问以下,要怎么样才可以改变尺寸并且在任意系统分辨率下居中呢??


RUBY 代码复制
  1. #给下面高度宽度赋值,就是分辨率的大小。
  2. 宽度=1280
  3. 高度=720
  4. 游戏ini名=".\\Game.ini"
  5. #============================================================================
  6. val = "\0"*256
  7. gps = Win32API.new('kernel32', 'GetPrivateProfileString',%w(p p p p l p), 'l')
  8. gps.call("Game", "Title", "", val, 256, 游戏ini名)
  9. title = val
  10. fw = Win32API.new('user32', 'FindWindow', %(p, p), 'i')
  11. hWnd = fw.call("RGSS Player", title)
  12. swp = Win32API.new('user32', 'SetWindowPos', %(l, l, i, i, i, i, i), 'i')
  13. ok = swp.call(hWnd, 0, 0, 0, 宽度, 高度, 2)

作者: VIPArcher    时间: 2014-10-29 19:21
你用这个脚本吧,按F5放大窗口
脚本来自 Sion叔的白菜组。(组群内部资源,加入可见[自由加入])
  1. # 按 F5 可以放大缩小窗口,存档记录玩家的偏好
  2. class << Input
  3.   alias_method :update_sion_zrscreen, :update
  4.   def update
  5.     Graphics.switch_room if trigger?(:F5)
  6.     update_sion_zrscreen
  7.   end
  8. end
  9. class << Graphics
  10.   FindWindowEx = Win32API.new('user32', 'FindWindowEx', 'llpp', 'i')
  11.   GetSysMtr    = Win32API.new('user32', 'GetSystemMetrics', 'i', 'i')
  12.   KeybdEvent   = Win32API.new('user32', 'keybd_event', 'iill', 'v')
  13.   SetWindowPos = Win32API.new('user32', 'SetWindowPos', 'liiiiip', 'i')
  14.   HWnd = FindWindowEx.call(0, 0, 'RGSS Player', 0)
  15.   #
  16.   def switch_room
  17.     zoom($game_system.zoom_rate == 2 ? 1 : 2)
  18.   end
  19.   def zoom(rate)
  20.     $game_system.zoom_rate = rate
  21.     __zoom__(width * rate, height * rate)
  22.   end
  23.   def reset
  24.     SetWindowPos.call(HWnd, 0, 0, 0, GetSysMtr.call(0), GetSysMtr.call(1), 0)
  25.   end
  26.   #
  27.   def full_screen
  28.     __toggle__ if GetSysMtr.call(0) > 640
  29.   end
  30.   def windowed
  31.     __toggle__ if GetSysMtr.call(0) < 640
  32.   end
  33. private
  34.   def __zoom__(w, h)
  35.     w += (GetSysMtr.call(5) + GetSysMtr.call(45)) * 2
  36.     h += (GetSysMtr.call(5) + GetSysMtr.call(45)) * 2 + GetSysMtr.call(4)
  37.     x = [0, GetSysMtr.call(0) - w].max / 2
  38.     y = [0, GetSysMtr.call(1) - h].max / 2
  39.     SetWindowPos.call(HWnd, 0, x, y, w, h, 0)
  40.   end
  41.   def __toggle__
  42.     KeybdEvent.call(0xA4, 0, 0, 0)
  43.     KeybdEvent.call(0x0D, 0, 0, 0)
  44.     KeybdEvent.call(0x0D, 0, 2, 0)
  45.     KeybdEvent.call(0xA4, 0, 2, 0)
  46.   end
  47. end

  48. class Game_System
  49.   attr_accessor :zoom_rate
  50.   alias_method :on_after_load_sion_zrscreen, :on_after_load
  51.   def on_after_load
  52.     Graphics.zoom(@zoom_rate || 1)
  53.     on_after_load_sion_zrscreen
  54.   end
  55. end
复制代码

作者: Jousun    时间: 2014-10-30 16:32
VIPArcher 发表于 2014-10-29 19:21
你用这个脚本吧,按F5放大窗口
脚本来自 Sion叔的白菜组。(组群内部资源,加入可见[自由加入]) ...

谢谢你,可以直接弄成默认放大 吗?
作者: VIPArcher    时间: 2014-10-30 16:46
Jousun 发表于 2014-10-30 16:32
谢谢你,可以直接弄成默认放大 吗?
  1. # 按 F5 可以放大缩小窗口,存档记录玩家的偏好
  2. class << Input
  3.   @@ok_room = true
  4.   alias_method :update_sion_zrscreen, :update
  5.   def update
  6.     Graphics.switch_room if @@ok_room || trigger?(:F5)
  7.     update_sion_zrscreen
  8.   end
  9. end
  10. class << Graphics
  11.   FindWindowEx = Win32API.new('user32', 'FindWindowEx', 'llpp', 'i')
  12.   GetSysMtr    = Win32API.new('user32', 'GetSystemMetrics', 'i', 'i')
  13.   KeybdEvent   = Win32API.new('user32', 'keybd_event', 'iill', 'v')
  14.   SetWindowPos = Win32API.new('user32', 'SetWindowPos', 'liiiiip', 'i')
  15.   HWnd = FindWindowEx.call(0, 0, 'RGSS Player', 0)
  16.   #
  17.   def switch_room
  18.     zoom($game_system.zoom_rate == 2 ? 1 : 2)
  19.     @@ok_room = nil
  20.   end
  21.   def zoom(rate)
  22.     $game_system.zoom_rate = rate
  23.     __zoom__(width * rate, height * rate)
  24.   end
  25.   def reset
  26.     SetWindowPos.call(HWnd, 0, 0, 0, GetSysMtr.call(0), GetSysMtr.call(1), 0)
  27.   end
  28.   #
  29.   def full_screen
  30.     __toggle__ if GetSysMtr.call(0) > 640
  31.   end
  32.   def windowed
  33.     __toggle__ if GetSysMtr.call(0) < 640
  34.   end
  35. private
  36.   def __zoom__(w, h)
  37.     w += (GetSysMtr.call(5) + GetSysMtr.call(45)) * 2
  38.     h += (GetSysMtr.call(5) + GetSysMtr.call(45)) * 2 + GetSysMtr.call(4)
  39.     x = [0, GetSysMtr.call(0) - w].max / 2
  40.     y = [0, GetSysMtr.call(1) - h].max / 2
  41.     SetWindowPos.call(HWnd, 0, x, y, w, h, 0)
  42.   end
  43.   def __toggle__
  44.     KeybdEvent.call(0xA4, 0, 0, 0)
  45.     KeybdEvent.call(0x0D, 0, 0, 0)
  46.     KeybdEvent.call(0x0D, 0, 2, 0)
  47.     KeybdEvent.call(0xA4, 0, 2, 0)
  48.   end
  49. end

  50. class Game_System
  51.   attr_accessor :zoom_rate
  52.   alias_method :on_after_load_sion_zrscreen, :on_after_load
  53.   def on_after_load
  54.     Graphics.zoom(@zoom_rate || 1)
  55.     on_after_load_sion_zrscreen
  56.   end
  57. end
复制代码
随意改的,未测试
作者: Jousun    时间: 2014-10-30 16:53
感谢楼上,我马上试试
作者: Jousun    时间: 2014-10-30 16:56
VIPArcher 发表于 2014-10-30 16:46
随意改的,未测试

再弱弱的请问一句,尺寸在哪里修改。。。。。。?




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