Project1

标题: 一個VA的拉伸遊戲視窗腳本,想跟各位請教... [打印本页]

作者: serena718    时间: 2012-9-26 21:40
标题: 一個VA的拉伸遊戲視窗腳本,想跟各位請教...
RUBY 代码复制
  1. #==============================================================================
  2. # ★ RGSS3-Extension
  3. # LNX25_ゲーム画面倍率切替
  4. #  ゲーム中、F5 キーでゲーム画面の表示倍率を切り替えます。
  5. #
  6. #  version   : 1.00 (12/02/27)
  7. #  author    : ももまる
  8. #  reference : [url]http://peachround.blog.fc2.com/blog-entry-20.html[/url]
  9. #
  10. #==============================================================================
  11.  
  12. module LNX25
  13.   #--------------------------------------------------------------------------
  14.   # ● 切替キー
  15.   #--------------------------------------------------------------------------
  16.   RESIZE_KEY = :F5 # 規定値: :F5
  17. end
  18.  
  19. #==============================================================================
  20. # ■ LNXスクリプト導入情報
  21. #==============================================================================
  22. $lnx_include = {} if $lnx_include == nil
  23. $lnx_include[:lnx25] = 100 # version
  24. p "OK:LNX25_ウィンドウサイズ変更"
  25.  
  26. #==============================================================================
  27. # ■ Graphics
  28. #==============================================================================
  29. module Graphics
  30.   @screen_zoom = 1
  31.   #--------------------------------------------------------------------------
  32.   # ● ゲーム画面の表示倍率取得
  33.   #--------------------------------------------------------------------------
  34.   def self.screen_zoom
  35.     @screen_zoom
  36.   end
  37.   #--------------------------------------------------------------------------
  38.   # ● ゲーム画面の表示倍率変更
  39.   #--------------------------------------------------------------------------
  40.   def self.screen_zoom=(rate)
  41.     self.rgssplayer_resize(rate)
  42.     @screen_zoom = rate
  43.   end
  44.   #--------------------------------------------------------------------------
  45.   # ● ウィンドウハンドルの取得(Win32API)
  46.   #--------------------------------------------------------------------------
  47.   def self.rgssplayer
  48.     Win32API.new("user32", "FindWindow", "pp", "i").call("RGSS Player", 0)
  49.   end
  50.   #--------------------------------------------------------------------------
  51.   # ● ウィンドウのリサイズ(Win32API)
  52.   #--------------------------------------------------------------------------
  53.   def self.rgssplayer_resize(rate)
  54.     move_w = Win32API.new("user32", "MoveWindow", "liiiil", "l")
  55.     get_sm = Win32API.new("user32", "GetSystemMetrics", "i", "i")
  56.     # サイズ計算
  57.     frame_w   = get_sm.call(7) * 2 # ウィンドウ枠(横方向)
  58.     frame_h   = get_sm.call(8) * 2 # ウィンドウ枠(縦方向)
  59.     caption_h = get_sm.call(4)     # タイトルバーの高さ
  60.     width  = self.width  * rate + frame_w
  61.     height = self.height * rate + frame_h + caption_h
  62.     x = (get_sm.call(0) - width ) / 2
  63.     y = (get_sm.call(1) - height) / 2
  64.     # ウィンドウ位置・サイズ変更(ウィンドウ, X, Y, 幅, 高さ, 更新フラグ)
  65.     move_w.call(self.rgssplayer, x, y, width, height, 1)
  66.   end
  67. end
  68. class << Graphics
  69.   #--------------------------------------------------------------------------
  70.   # ● フレーム更新
  71.   #--------------------------------------------------------------------------
  72.   alias :lnx25_update :update
  73.   def update
  74.     # 元のメソッドを呼ぶ
  75.     lnx25_update
  76.     # F5 キーが押されたらリサイズ
  77.     if Input.trigger?(LNX25::RESIZE_KEY)
  78.       self.screen_zoom = (self.screen_zoom == 1 ? 2 : 1)
  79.     end
  80.   end
  81. end


這是我在日站上翻到的一個腳本,來源:http://peachround.blog.fc2.com/blog-entry-20.html

作用在於插入遊戲後,於遊戲內按下F5會將遊戲視窗拉伸至兩倍大
跟擴展分辨率不太相同的是,他是將遊戲內畫面也跟著拉伸,有點像全屏化,但只是將畫面擴展為兩倍

我個人想將這個腳本也能使用在RGSS1上,該腳本放進XP也不會報錯,但就是沒有效果
本來想嘗試自己修改一翻,但這腳本似乎有動到API,而我對API整個一竅不通
膚淺的我想著API基本上三個版本的使用方法應該是不會差太多,所以我並沒有管這部分
我以為問題可能出在Graphic上,但開了RGSS3的F1,裡面似乎除了self.rgssplayer_resize這個語法外好像沒有其他改動
我有用本站上的某個腳本(找不到連結...),在RGSS1上模擬了RGSS2的效果,裡面也包含了上面那個語法

我個人覺得這個腳本十分有用,畢竟擴展分辨率後畫面實在卡的不行,只好用這種偽‧分辨率...
不強求各位高手弄出該腳本的XP板給我
但不知道有沒有人可以幫我解釋下該腳本的原理(尤其是前面API的部分,完全看不懂...)
謝謝各位了...
作者: 凌童鞋    时间: 2012-9-28 06:13
本帖最后由 凌童鞋 于 2012-9-28 06:14 编辑

大概跟48行获取hWnd的东西有关
  1. Win32API.new("user32", "FindWindow", "pp", "i").call("RGSS Player", 0)
复制代码
今天考完试帮你看看
作者: yangff    时间: 2012-9-28 21:02
XP不能这样放大……XP这样放大不会拉伸貌似
作者: serena718    时间: 2012-9-29 16:17
yangff 发表于 2012-9-28 21:02
XP不能这样放大……XP这样放大不会拉伸貌似

所以真的可能是Graphic的問題了?
但是全屏化的拉伸效果又是怎麼做到的呢……
網路上好像找不到Graphic的源碼…谷歌和百度都找不到
如果可以知道XP或VX的源碼,或許還可以依樣畫葫蘆了
作者: yangff    时间: 2012-9-29 20:40
serena718 发表于 2012-9-29 16:17
所以真的可能是Graphic的問題了?
但是全屏化的拉伸效果又是怎麼做到的呢……
網路上好像找不到Graphic的 ...

和这个没关系,只是XP和VX描绘方式的不同罢了。
作者: q854240045    时间: 2012-10-20 12:56
这个貌似好一点,但是只是分享或者对比一下你先试试吧。
RUBY 代码复制
  1. #给下面高度宽度赋值,就是分辨率的大小。
  2. 宽度=800 #1018
  3. 高度=600 #746
  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)





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