赞 | 170 |
VIP | 6 |
好人卡 | 208 |
积分 | 230 |
经验 | 137153 |
最后登录 | 2024-11-18 |
在线时间 | 8639 小时 |
Lv5.捕梦者
- 梦石
- 0
- 星屑
- 22973
- 在线时间
- 8639 小时
- 注册时间
- 2011-12-31
- 帖子
- 3367
|
本帖最后由 tseyik 于 2014-4-3 13:22 编辑
加入這脚本- #******************************************************************************
- #
- # * 簡便設定全画面
- #
- # --------------------------------------------------------------------------
- # バージョン : 1.0.1
- # 対 応 : RPGツクールVX /VA
- # 制 作 者 : CACAO
- # 配 布 元 : http://cacaosoft.web.fc2.com/
- # --------------------------------------------------------------------------
- # == 摘 要 ==
- #
- # : 添加改變視窗大小功能。
- #
- # --------------------------------------------------------------------------
- # == 使用方法 ==
- #
- # ★ WLIB::SetGameWindowSize(width, height)
- # 視窗移動到中心、然後更改指定的尺寸。
- # 参数為負数、或大放桌面會改成全画面。
- # 處理失敗時會返回 false 。
- #
- #
- #******************************************************************************
- #==============================================================================
- # ◆ 使用者設定
- #==============================================================================
- module WND_SIZE
- #--------------------------------------------------------------------------
- # ◇ 変更鍵
- #--------------------------------------------------------------------------
- # nil .. 不調整大小
- #--------------------------------------------------------------------------
- INPUT_KEY = :F5
- #--------------------------------------------------------------------------
- # ◇ 大小列表
- #--------------------------------------------------------------------------
- # [ [横幅, 縦幅], ... ] 以二個数据為一組設置。
- # 設為 0 則為全画面。
- #--------------------------------------------------------------------------
- SIZE_LIST = [ [544,416], [640,480], [800,600], [1088,832], [0,0] ]
- #--------------------------------------------------------------------------
- # ◇ 儲存
- #--------------------------------------------------------------------------
- # 設定視窗大小状況儲存的文件名。
- # 如果為零,則它不保存大小。
- #--------------------------------------------------------------------------
- FILE_SAVE = "System/test"
- end
- #/////////////////////////////////////////////////////////////////////////////#
- # #
- # 下面的腳本不需要改變。 #
- # #
- #/////////////////////////////////////////////////////////////////////////////#
- module WLIB
- #--------------------------------------------------------------------------
- # ● 定数
- #--------------------------------------------------------------------------
- # SystemMetrics
- SM_CYCAPTION = 0x04
- SM_CXDLGFRAME = 0x07
- SM_CYDLGFRAME = 0x08
- # SetWindowPos
- SWP_NOSIZE = 0x01
- SWP_NOMOVE = 0x02
- SWP_NOZORDER = 0x04
- #--------------------------------------------------------------------------
- # ● Win32API
- #--------------------------------------------------------------------------
- @@FindWindow =
- Win32API.new('user32', 'FindWindow', 'pp', 'l')
- @@GetDesktopWindow =
- Win32API.new('user32', 'GetDesktopWindow', 'v', 'l')
- @@SetWindowPos =
- Win32API.new('user32', 'SetWindowPos', 'lliiiii', 'i')
- @@GetClientRect =
- Win32API.new('user32', 'GetClientRect', 'lp', 'i')
- @@GetWindowRect =
- Win32API.new('user32', 'GetWindowRect', 'lp', 'i')
- @@GetWindowLong =
- Win32API.new('user32', 'GetWindowLong', 'li', 'l')
- @@GetSystemMetrics =
- Win32API.new('user32', 'GetSystemMetrics', 'i', 'i')
- @@SystemParametersInfo =
- Win32API.new('user32', 'SystemParametersInfo', 'iipi', 'i')
- #--------------------------------------------------------------------------
- # ● 視窗情報
- #--------------------------------------------------------------------------
- GAME_TITLE = load_data("Data/System.rvdata2").game_title.encode('SHIFT_JIS')
- GAME_HANDLE = @@FindWindow.call("RGSS Player", GAME_TITLE)
- # GAME_HANDLE = Win32API.new('user32', 'GetForegroundWindow', 'v', 'l').call
- GAME_STYLE = @@GetWindowLong.call(GAME_HANDLE, -16)
- GAME_EXSTYLE = @@GetWindowLong.call(GAME_HANDLE, -20)
- HDSK = @@GetDesktopWindow.call
- module_function
- #--------------------------------------------------------------------------
- # ● GetWindowRect
- #--------------------------------------------------------------------------
- def GetWindowRect(hwnd)
- r = [0,0,0,0].pack('l4')
- if @@GetWindowRect.call(hwnd, r) != 0
- result = Rect.new(*r.unpack('l4'))
- result.width -= result.x
- result.height -= result.y
- else
- result = nil
- end
- return result
- end
- #--------------------------------------------------------------------------
- # ● GetClientRect
- #--------------------------------------------------------------------------
- def GetClientRect(hwnd)
- r = [0,0,0,0].pack('l4')
- if @@GetClientRect.call(hwnd, r) != 0
- result = Rect.new(*r.unpack('l4'))
- else
- result = nil
- end
- return result
- end
- #--------------------------------------------------------------------------
- # ● GetSystemMetrics
- #--------------------------------------------------------------------------
- def GetSystemMetrics(index)
- @@GetSystemMetrics.call(index)
- end
- #--------------------------------------------------------------------------
- # ● SetWindowPos
- #--------------------------------------------------------------------------
- def SetWindowPos(hwnd, x, y, width, height, z, flag)
- @@SetWindowPos.call(hwnd, z, x, y, width, height, flag) != 0
- end
- #--------------------------------------------------------------------------
- # ● ウィンドウのサイズを取得
- #--------------------------------------------------------------------------
- def GetGameWindowRect
- GetWindowRect(GAME_HANDLE)
- end
- #--------------------------------------------------------------------------
- # ● ウィンドウのクライアントサイズを取得
- #--------------------------------------------------------------------------
- def GetGameClientRect
- GetClientRect(GAME_HANDLE)
- end
- #--------------------------------------------------------------------------
- # ● デスクトップのサイズを取得
- #--------------------------------------------------------------------------
- def GetDesktopRect
- r = [0,0,0,0].pack('l4')
- if @@SystemParametersInfo.call(0x30, 0, r, 0) != 0
- result = Rect.new(*r.unpack('l4'))
- result.width -= result.x
- result.height -= result.y
- else
- result = nil
- end
- return result
- end
- #--------------------------------------------------------------------------
- # ● 取得視窗大小
- #--------------------------------------------------------------------------
- def GetFrameSize
- return [
- GetSystemMetrics(SM_CYCAPTION), # タイトルバー
- GetSystemMetrics(SM_CXDLGFRAME), # 左右フレーム
- GetSystemMetrics(SM_CYDLGFRAME) # 上下フレーム
- ]
- end
- #--------------------------------------------------------------------------
- # ● 変更視窗位置
- #--------------------------------------------------------------------------
- def MoveGameWindow(x, y)
- SetWindowPos(GAME_HANDLE, x, y, 0, 0, 0, SWP_NOSIZE|SWP_NOZORDER)
- end
- #--------------------------------------------------------------------------
- # ● 視窗位置到中央
- #--------------------------------------------------------------------------
- def MoveGameWindowCenter
- dr = GetDesktopRect()
- wr = GetGameWindowRect()
- x = (dr.width - wr.width) / 2
- y = (dr.height - wr.height) / 2
- SetWindowPos(GAME_HANDLE, x, y, 0, 0, 0, SWP_NOSIZE|SWP_NOZORDER)
- end
- #--------------------------------------------------------------------------
- # ● 変更視窗大小
- #--------------------------------------------------------------------------
- def SetGameWindowSize(width, height)
- # 各領域取得
- dr = GetDesktopRect()
- wr = GetGameWindowRect()
- cr = GetGameClientRect()
- return false unless dr && wr && cr
- # 取得幀大小
- frame = GetFrameSize()
- ft = frame[0] + frame[2]
- fl = frame[1]
- fs = frame[1] * 2
- fb = frame[2]
- if width <= 0 || height <= 0 || width >= dr.width || height >= dr.height
- w = dr.width + fs
- h = dr.height + ft + fb
- SetWindowPos(GAME_HANDLE, -fl, -ft, w, h, 0, SWP_NOZORDER)
- else
- w = width + fs
- h = height + ft + fb
- SetWindowPos(GAME_HANDLE, 0, 0, w, h, 0, SWP_NOMOVE|SWP_NOZORDER)
- MoveGameWindowCenter()
- end
- end
- end
- class Scene_Base
- #--------------------------------------------------------------------------
- # ●
- #--------------------------------------------------------------------------
- @@screen_mode = 0
- #--------------------------------------------------------------------------
- # ●
- #--------------------------------------------------------------------------
- def self.screen_mode=(index)
- @@screen_mode = index % WND_SIZE::SIZE_LIST.size
- end
- #--------------------------------------------------------------------------
- # ●
- #--------------------------------------------------------------------------
- def self.screen_mode
- @@screen_mode
- end
- #--------------------------------------------------------------------------
- # ○ 幀更新
- #--------------------------------------------------------------------------
- alias _cao_update_wndsize update
- def update
- _cao_update_wndsize
- if Input.trigger?(WND_SIZE::INPUT_KEY) && WLIB::GAME_HANDLE != 0
- Scene_Base.screen_mode += 1
- if WLIB::SetGameWindowSize(*WND_SIZE::SIZE_LIST[@@screen_mode])
- if WND_SIZE::FILE_SAVE
- save_data(Scene_Base.screen_mode, WND_SIZE::FILE_SAVE)
- end
- else
- Sound.play_buzzer
- end
- end
- end
- end
- module WND_SIZE
- #--------------------------------------------------------------------------
- # ● 除去太大的設定
- #--------------------------------------------------------------------------
- def self.remove_large_window
- dr = WLIB::GetDesktopRect()
- WND_SIZE::SIZE_LIST.reject! do |wsz|
- wsz.size != 2 || dr.width < wsz[0] || dr.height < wsz[1]
- end
- if WND_SIZE::SIZE_LIST.empty?
- WND_SIZE::SIZE_LIST << [Graphics.width, Graphics.height]
- end
- end
- #--------------------------------------------------------------------------
- # ● 初期大小設定
- #--------------------------------------------------------------------------
- def self.init_window_size
- if WND_SIZE::FILE_SAVE && File.file?(WND_SIZE::FILE_SAVE)
- Scene_Base.screen_mode = load_data(WND_SIZE::FILE_SAVE)
- WLIB::SetGameWindowSize(*WND_SIZE::SIZE_LIST[Scene_Base.screen_mode])
- end
- end
- end
- WND_SIZE.remove_large_window
- WND_SIZE.init_window_size
复制代码 然後Main加入WLIB::SetGameWindowSize(0, 0)
例:
WLIB::SetGameWindowSize(0, 0)
Font.default_name = 'PMingLiU'
rgss_main { SceneManager.run }
這脚本按F5可切換解象度,[544,416]>[640,480]>[800,600]> [1088,832]>全画面>[544,416]
若不使用這功能可把脚本中的
INPUT_KEY = :F5
改成
INPUT_KEY =nil
|
评分
-
查看全部评分
|