查看: 4137|回复: 5

[讨论] 一個VA的拉伸遊戲視窗腳本,想跟各位請教...

[复制链接]
梦石
0
星屑
687
在线时间
1808 小时
注册时间
2009-7-12
回帖
416
发表于 2012-9-26 21:40:45 | 显示全部楼层 |阅读模式

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

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

×
[pre lang="ruby" line="1"]#==============================================================================
# ★ RGSS3-Extension
# LNX25_ゲーム画面倍率切替
#  ゲーム中、F5 キーでゲーム画面の表示倍率を切り替えます。
#
#  version   : 1.00 (12/02/27)
#  author    : ももまる
#  reference : http://peachround.blog.fc2.com/blog-entry-20.html
#
#==============================================================================

module LNX25
  #--------------------------------------------------------------------------
  # ● 切替キー
  #--------------------------------------------------------------------------
  RESIZE_KEY = :F5 # 規定値: :F5
end

#==============================================================================
# ■ LNXスクリプト導入情報
#==============================================================================
$lnx_include = {} if $lnx_include == nil
$lnx_include[:lnx25] = 100 # version
p "OK:LNX25_ウィンドウサイズ変更"

#==============================================================================
# ■ Graphics
#==============================================================================
module Graphics
  @screen_zoom = 1
  #--------------------------------------------------------------------------
  # ● ゲーム画面の表示倍率取得
  #--------------------------------------------------------------------------
  def self.screen_zoom
    @screen_zoom
  end
  #--------------------------------------------------------------------------
  # ● ゲーム画面の表示倍率変更
  #--------------------------------------------------------------------------
  def self.screen_zoom=(rate)
    self.rgssplayer_resize(rate)
    @screen_zoom = rate
  end
  #--------------------------------------------------------------------------
  # ● ウィンドウハンドルの取得(Win32API)
  #--------------------------------------------------------------------------
  def self.rgssplayer
    Win32API.new("user32", "FindWindow", "pp", "i").call("RGSS Player", 0)
  end
  #--------------------------------------------------------------------------
  # ● ウィンドウのリサイズ(Win32API)
  #--------------------------------------------------------------------------
  def self.rgssplayer_resize(rate)
    move_w = Win32API.new("user32", "MoveWindow", "liiiil", "l")
    get_sm = Win32API.new("user32", "GetSystemMetrics", "i", "i")
    # サイズ計算
    frame_w   = get_sm.call(7) * 2 # ウィンドウ枠(横方向)
    frame_h   = get_sm.call(8) * 2 # ウィンドウ枠(縦方向)
    caption_h = get_sm.call(4)     # タイトルバーの高さ
    width  = self.width  * rate + frame_w
    height = self.height * rate + frame_h + caption_h
    x = (get_sm.call(0) - width ) / 2
    y = (get_sm.call(1) - height) / 2
    # ウィンドウ位置・サイズ変更(ウィンドウ, X, Y, 幅, 高さ, 更新フラグ)
    move_w.call(self.rgssplayer, x, y, width, height, 1)
  end
end
class << Graphics
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  alias :lnx25_update :update
  def update
    # 元のメソッドを呼ぶ
    lnx25_update
    # F5 キーが押されたらリサイズ
    if Input.trigger?(LNX25::RESIZE_KEY)
      self.screen_zoom = (self.screen_zoom == 1 ? 2 : 1)
    end
  end
end[/pre]

這是我在日站上翻到的一個腳本,來源: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的部分,完全看不懂...)
謝謝各位了...
梦石
0
星屑
120
在线时间
5250 小时
注册时间
2011-10-7
回帖
1769

开拓者贵宾

发表于 2012-9-28 06:13:07 | 显示全部楼层
本帖最后由 凌童鞋 于 2012-9-28 06:14 编辑

大概跟48行获取hWnd的东西有关
  1. Win32API.new("user32", "FindWindow", "pp", "i").call("RGSS Player", 0)
复制代码
今天考完试帮你看看

点评

所以可能是在一開始沒有找到窗口所以導致接下來的效果都無法執行?  发表于 2012-9-29 16:15
回复

使用道具 举报

傻♂逼

梦石
0
星屑
374
在线时间
1606 小时
注册时间
2007-3-13
回帖
6005

烫烫烫开拓者

发表于 2012-9-28 21:02:42 | 显示全部楼层
XP不能这样放大……XP这样放大不会拉伸貌似
哎呀,蛋疼什么的最有爱了
回复

使用道具 举报

梦石
0
星屑
687
在线时间
1808 小时
注册时间
2009-7-12
回帖
416
 楼主| 发表于 2012-9-29 16:17:29 | 显示全部楼层
yangff 发表于 2012-9-28 21:02
XP不能这样放大……XP这样放大不会拉伸貌似

所以真的可能是Graphic的問題了?
但是全屏化的拉伸效果又是怎麼做到的呢……
網路上好像找不到Graphic的源碼…谷歌和百度都找不到
如果可以知道XP或VX的源碼,或許還可以依樣畫葫蘆了

点评

我覺得只是調整視窗位置和電腦本身的解析度....不過確切的我也不知道什麼原因就是了(汗  发表于 2013-7-25 09:49
回复

使用道具 举报

傻♂逼

梦石
0
星屑
374
在线时间
1606 小时
注册时间
2007-3-13
回帖
6005

烫烫烫开拓者

发表于 2012-9-29 20:40:39 | 显示全部楼层
serena718 发表于 2012-9-29 16:17
所以真的可能是Graphic的問題了?
但是全屏化的拉伸效果又是怎麼做到的呢……
網路上好像找不到Graphic的 ...

和这个没关系,只是XP和VX描绘方式的不同罢了。
哎呀,蛋疼什么的最有爱了
回复

使用道具 举报

梦石
0
星屑
604
在线时间
333 小时
注册时间
2011-11-19
回帖
166
发表于 2012-10-20 12:56:20 | 显示全部楼层
这个貌似好一点,但是只是分享或者对比一下你先试试吧。[pre lang="ruby" line="1"]#给下面高度宽度赋值,就是分辨率的大小。
宽度=800 #1018
高度=600 #746
游戏ini名=".\\Game.ini"
#============================================================================
val = "\0"*256
gps = Win32API.new('kernel32', 'GetPrivateProfileString',%w(p p p p l p), 'l')
gps.call("Game", "Title", "", val, 256, 游戏ini名)
title = val
fw = Win32API.new('user32', 'FindWindow', %(p, p), 'i')
hWnd = fw.call("RGSS Player", title)
swp = Win32API.new('user32', 'SetWindowPos', %(l, l, i, i, i, i, i), 'i')
ok = swp.call(hWnd, 0, 0, 0, 宽度, 高度, 2) [/pre]
支持《彼岸之光》系列!加油!
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部