查看: 10850|回复: 9

[已经解决] 关于全屏游戏等比例缩放画面的问题

[复制链接]
梦石
0
星屑
845
在线时间
601 小时
注册时间
2007-12-18
回帖
110
发表于 2016-9-18 10:49:22 | 显示全部楼层 |阅读模式

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

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

×
系统默认全屏游戏下缩放游戏是按照显示器尺寸进行的,现在大家都是宽屏显示器,游戏全屏也是按宽屏全屏显示,画面变宽很不习惯啊!
请问调整哪里能将全屏模式化为等比例缩放?
2007-2017.10年rpg制作生涯···
梦石
0
星屑
3557
在线时间
2337 小时
注册时间
2015-8-25
回帖
928

开拓者

发表于 2016-9-18 11:02:59 | 显示全部楼层
本帖最后由 七重 于 2016-9-18 11:09 编辑

http://cacaosoft.webcrow.jp/script/rgss3/wndsz.html

用这个脚本

代码[pre lang="ruby"]#******************************************************************************
#
#    * エセフルスクリーン
#
#  --------------------------------------------------------------------------
#    バージョン :  1.0.1
#    対      応 :  RPGツクールVX : RGSS2
#    制  作  者 :  CACAO
#    配  布  元 :  http://cacaosoft.web.fc2.com/
#  --------------------------------------------------------------------------
#   == 概    要 ==
#
#   : ウィンドウのサイズを変更する機能を追加します。
#
#  --------------------------------------------------------------------------
#   == 使用方法 ==
#
#    ★ WLIB::SetGameWindowSize(width, height)
#     ウィンドウを中央に移動し、指定されたサイズに変更します。
#     引数が負数、もしくはデスクトップより大きい場合はフルサイズで表示されます。
#     処理が失敗すると false を返します。
#
#
#******************************************************************************


#==============================================================================
# ◆ ユーザー設定
#==============================================================================
module WND_SIZE
  #--------------------------------------------------------------------------
  # ◇ サイズ変更キー
  #--------------------------------------------------------------------------
  #     nil .. サイズ変更を行わない
  #--------------------------------------------------------------------------
  INPUT_KEY = :F5
  #--------------------------------------------------------------------------
  # ◇ サイズリスト
  #--------------------------------------------------------------------------
  #     [ [横幅, 縦幅], ... ] のような二次元配列で設定します。
  #     幅を 0 にするとデスクトップサイズになります。
  #--------------------------------------------------------------------------
  SIZE_LIST = [[1088,832], [544,416], [816,624], [0,0],]   #看这里 看这里。 按照自己想要的比例计算出大小,填进去就好了。  
  #--------------------------------------------------------------------------
  # ◇ セーブファイル
  #--------------------------------------------------------------------------
  #   ウィンドウサイズの状況を保存するファイル名を設定します。
  #   nil にすると、サイズを保存しません。
  #--------------------------------------------------------------------------
  FILE_SAVE = "System/window"
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
  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()         # Rect デスクトップ
    wr = GetGameWindowRect()      # Rect ウィンドウ
    cr = GetGameClientRect()      # Rect クライアント
    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[/pre]


在我写了标记的地方。
按照自己想要的比例计算出大小,填进去就好了。

比如说默认是544x416大小

想要变成2倍,就计算出。544X2=1088,416x2=832.

将结果填进去。

按f5调整。

评分

参与人数 1星屑 +250 梦石 +1 收起 理由
RaidenInfinity + 250 + 1 楼主认可的解答

查看全部评分

回复

使用道具 举报

梦石
1
星屑
22083
在线时间
4885 小时
注册时间
2014-12-22
回帖
1509

开拓者

发表于 2016-9-18 11:28:50 | 显示全部楼层
除了2楼的,我还推荐这个:
Fullscreen++
http://forums.rpgmakerweb.com/index.php?/topic/14081-fullscreen/
页面不用翻墙,脚本下载需要(请自行……)
F5切换全屏/窗口,F6调整画面大小(有3个档,x1、x2、适应全屏。并且在窗口和全屏下可分别设置不同的画面大小),可记忆设定,可屏蔽va自带的全屏,好用推荐!

点评

我看中它可以分别调全屏和窗口的大小,测试游戏的时候很方便。对倍率不能自己定,不过现在显示器分辨率也很多我用它的全屏就好啦~  发表于 2016-9-19 02:57
这个还真不错诶!省了设置。收下了用XD、但是如果能调整倍率就更好了。  发表于 2016-9-18 16:17

评分

参与人数 1星屑 +250 梦石 +1 收起 理由
RaidenInfinity + 250 + 1 楼主认可的解答

查看全部评分

回复 1 0

使用道具 举报

梦石
0
星屑
845
在线时间
601 小时
注册时间
2007-12-18
回帖
110
 楼主| 发表于 2016-9-18 21:14:50 | 显示全部楼层
shencao 发表于 2016-9-18 11:28
除了2楼的,我还推荐这个:
Fullscreen++
http://forums.rpgmakerweb.com/index.php?/topic/14081-fullscre ...

虽然放大缩小能行,但播放视频时候,视频尺寸还是会保留原样,请问如何像游戏自带的全屏效果那样,连播放视频的尺寸也一起放大呢

点评

这个脚本大概不带这个功能/_\你试下2楼?  发表于 2016-9-19 02:51
2007-2017.10年rpg制作生涯···
回复

使用道具 举报

梦石
0
星屑
845
在线时间
601 小时
注册时间
2007-12-18
回帖
110
 楼主| 发表于 2016-9-19 09:50:02 | 显示全部楼层
七重 发表于 2016-9-18 11:02
http://cacaosoft.webcrow.jp/script/rgss3/wndsz.html

用这个脚本

5.png

这个出现错误

点评

我不知道你是什么时候出现这个错误,这个脚本有个路径,文件名要用英文的限制。  发表于 2016-9-19 12:41
2007-2017.10年rpg制作生涯···
回复

使用道具 举报

梦石
0
星屑
845
在线时间
601 小时
注册时间
2007-12-18
回帖
110
 楼主| 发表于 2016-9-19 13:29:41 | 显示全部楼层
测试完了,虽然很感谢两位回答,但影像问题仍然无法解决,若能把游戏脚本自带的全屏功能更改一下就好了
2007-2017.10年rpg制作生涯···
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部