设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3747|回复: 10
打印 上一主题 下一主题

[已经解决] RGSS301如何实现分辨率解放?

[复制链接]

Lv2.观梦者

梦石
0
星屑
501
在线时间
65 小时
注册时间
2018-4-15
帖子
22
跳转到指定楼层
1
发表于 2018-4-30 00:23:44 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
我用的VA是steam正版,然而网络上和论坛上只有RGSS300.dll的破解版。用夏娜的纯脚本扩大会严重降低FPS,求问RGSS301.DLL应该怎么改?

Lv4.逐梦者

梦石
0
星屑
7427
在线时间
948 小时
注册时间
2017-9-27
帖子
583
2
发表于 2018-5-3 22:54:13 | 只看该作者
我从TheoAllen的TSBS范例工程里找到一个脚本,实测可以提高游戏分辨率,帧率下降也不太明显。至于是不是跟你用的一些脚本兼容,那就有待于你自己测试了。
RUBY 代码复制
  1. #=============================================================================
  2. # Σ Fullscreen
  3. #-----------------------------------------------------------------------------
  4. # @author  : Gabriel "Gab!" Teles
  5. # @date    : 2014-09-27
  6. # @version : 0.91
  7. #-----------------------------------------------------------------------------
  8. # TODO:
  9. #   - Transições por imagens
  10. #-----------------------------------------------------------------------------
  11. # Créditos:
  12. #   Scripter Desconhecido no Pastebin ([url]http://pastebin.com/sM2MNJZj[/url])
  13. #   Esrever : Map viewport/scroll fix
  14. #-----------------------------------------------------------------------------
  15. # Permite utilizar fullscreen real (sem redimensionamento de tela), e alterar
  16. # o limite da função Graphics.resize_screen para a resolução máxima do monitor
  17. # ou um valor próximo.
  18. #=============================================================================
  19.  
  20. # Módulo Graphics
  21. class << Graphics
  22.   # API
  23.   User32   = DL.dlopen('user32')
  24.   Kernel32 = DL.dlopen('kernel32')
  25.   GetActiveWindow  = DL::CFunc.new(  User32['GetActiveWindow' ], DL::TYPE_LONG)
  26.   GetSystemMetrics = DL::CFunc.new(  User32['GetSystemMetrics'], DL::TYPE_LONG)
  27.   GetWindowRect    = DL::CFunc.new(  User32['GetWindowRect'   ], DL::TYPE_LONG)
  28.   SetWindowLong    = DL::CFunc.new(  User32['SetWindowLong'   ], DL::TYPE_LONG)
  29.   SetWindowPos     = DL::CFunc.new(  User32['SetWindowPos'    ], DL::TYPE_LONG)
  30.   GetModuleHandle  = DL::CFunc.new(Kernel32['GetModuleHandle' ], DL::TYPE_LONG)  
  31.  
  32.   # DLL sendo utilizada
  33.   _DLLName = DL::CPtr.malloc(140)
  34.   s = DL::CFunc.new(Kernel32['GetPrivateProfileString'], DL::TYPE_LONG).call([
  35.     DL::CPtr["Game"].to_i,
  36.     DL::CPtr["Library"].to_i,
  37.     0,
  38.     _DLLName.to_i,
  39.     140,
  40.     DL::CPtr["./Game.ini"].to_i
  41.   ])
  42.  
  43.   @@DLLName = File.basename(_DLLName.to_s(s))
  44.  
  45.   # Verifica se é uma RGSS3xx.dll
  46.   if @@DLLName.match(/^RGSS3(\d{2})\.dll$/)
  47.     @@DLLVersion = $1.to_i
  48.  
  49.     # Verifica se a versão é 0 ou 1.
  50.     if @@DLLVersion.between?(0, 1)
  51.       # Flag de fullscreen
  52.       @@inFullscreen = false
  53.  
  54.       # Instância da DLL. *Necessariamente* a RGSS300.dll ou RGSS301.dll, visto
  55.       # que o trabalho com memória a seguir é específico.
  56.  
  57.       @@DLLHandle   = GetModuleHandle.call([DL::CPtr[@@DLLName].to_i])
  58.  
  59.       # Instância da janela de jogo
  60.       @@hWnd       = GetActiveWindow.call([])
  61.  
  62.       # Tamanho da tela
  63.       @@screenSize = [
  64.         GetSystemMetrics.call([0]),
  65.         GetSystemMetrics.call([1])
  66.       ]
  67.  
  68.       # Calcula o próximo tamanho divisível por 32 para fazer a limitação
  69.       width, height = @@screenSize
  70.       width  += (32 - (width  % 32)) unless (width  % 32).zero?
  71.       height += (32 - (height % 32)) unless (height % 32).zero?
  72.       puts "Limitando para: #{width}x#{height}" if $TEST
  73.  
  74.       #-----------------------------------------------------------------------
  75.       # Bruxaria de scripter desconhecido. Remove a limitação de tamanho para
  76.       # o método Graphics.resize_screen (640x480)
  77.       #
  78.       # Base retirada de: [url]http://pastebin.com/sM2MNJZj[/url]
  79.       #
  80.       # Adaptações para a RGSS300.dll e início do mapeamento dos endereços
  81.       # utilizados por Gab!
  82.       #-----------------------------------------------------------------------
  83.  
  84.       # Número para string
  85.       wh = ->(w, h, off = 0){
  86.         [w + off, h + off].pack('l2').scan(/..../)
  87.       }
  88.  
  89.       # Altera um valor na memória relativa à DLL
  90.       mod = ->(adr, val){
  91.         adr += @@OFF if @@DLLVersion.zero?
  92.         DL::CPtr.new(@@DLLHandle + adr)[0, val.size] = val
  93.       }
  94.  
  95.       # Valores úteis
  96.       wt,  ht  = width.divmod(32), height.divmod(32)
  97.       w,   h   = wh.(width, height)
  98.       ww,  hh  = wh.(width, height, 32)
  99.       www, hhh = wh.(wt.first, ht.first, 1)
  100.       zero     = [0].pack('l')
  101.  
  102.       # Faz as alterações na memória
  103.  
  104.       # Graphics
  105.       @@OFF = 0
  106.       mod.(0x195F, "\x90"*5) # ???
  107.       mod.(0x19A4,   h     ) # ???
  108.       mod.(0x19A9,   w     ) # ???
  109.       mod.(0x1A56,   h     ) # ???
  110.       mod.(0x1A5B,   w     ) # ???
  111.       mod.(0x20F6,   w     ) # Max width  (?)
  112.       mod.(0x20FF,   w     ) # Max width  (?)
  113.       mod.(0x2106,   h     ) # Max height (?)
  114.       mod.(0x210F,   h     ) # Max height (?)
  115.  
  116.       # Plane (?) Class
  117.       @@OFF   = -0xC0
  118.       Graphics::PlaneSpeedUp = false
  119.         # Setando para false não é necessário reescrever classe Plane. No
  120.         # entanto, o mapa fica MUITO lento.
  121.       mod.(0x1C5E3,  Graphics::PlaneSpeedUp ? zero : h) # Max height
  122.       mod.(0x1C5E8,  Graphics::PlaneSpeedUp ? zero : w) # Max width
  123.  
  124.       # ???
  125.       @@OFF = 0x20
  126.       mod.(0x1F477,  h     ) # ???
  127.       mod.(0x1F47C,  w     ) # ???
  128.  
  129.       # Tilemap Class
  130.       @@OFF = 0x1E0
  131.       mod.(0x211FF,  hh    ) # Tilemap render height
  132.       mod.(0x21204,  ww    ) # Tilemap render width
  133.       mod.(0x21D7D,  hhh[0]) # Tilemap max tiles on screen height
  134.       mod.(0x21E01,  www[0]) # Tilemap max tiles on screen width
  135.  
  136.       # ???
  137.       @@OFF = 0x140
  138.       mod.(0x10DEA8, h     ) # ???
  139.       mod.(0x10DEAD, w     ) # ???     
  140.       mod.(0x10DEDF, h     ) # ???
  141.       mod.(0x10DEE3, w     ) # ???
  142.       mod.(0x10DF14, h     ) # ???
  143.       mod.(0x10DF18, w     ) # ???
  144.       mod.(0x10DF48, h     ) # ???
  145.       mod.(0x10DF4C, w     ) # ???
  146.       mod.(0x10E6A7, w     ) # ???
  147.       mod.(0x10E6C3, h     ) # ???
  148.       mod.(0x10EEA9, w     ) # ???
  149.       mod.(0x10EEB9, h     ) # ???
  150.  
  151.       #-------------------------------------------------------------------------
  152.       # Fim da bruxaria
  153.       #-------------------------------------------------------------------------
  154.  
  155.       # Sprite de transição de tela
  156.       @@TransitionSprite = Sprite.new
  157.       @@TransitionSprite.bitmap = Bitmap.new(Graphics.width, Graphics.height)
  158.       @@TransitionSprite.bitmap.fill_rect(@@TransitionSprite.bitmap.rect, Color.new(0, 0, 0))
  159.       @@TransitionSprite.opacity = 255
  160.       @@TransitionSprite.z = 0x7FFFFFFF
  161.  
  162.       # Bitmap da tela no momento do Graphics.freeze
  163.       @@FrozenBitmap = Bitmap.new(Graphics.width, Graphics.height)
  164.       @@FrozenBitmap.fill_rect(@@FrozenBitmap.rect, Color.new(0, 0, 0))
  165.  
  166.       # Realiza a transição de tela
  167.       # Nota: Não é possível realizar transição de tela com imagens
  168.       alias oldFullscreenResTransition transition
  169.       def transition(time, image='', vague=40)
  170.         @@TransitionSprite.bitmap.dispose
  171.         @@TransitionSprite.dispose
  172.         @@TransitionSprite = Sprite.new
  173.         @@TransitionSprite.bitmap = @@FrozenBitmap
  174.         @@TransitionSprite.opacity = 255
  175.         @@TransitionSprite.z = 0x7FFFFFFF
  176.  
  177.         oldFullscreenResTransition(0)
  178.  
  179.         dec = (255.0 / time)
  180.         time.times {
  181.           @@TransitionSprite.opacity -= dec
  182.           Graphics.update
  183.         }
  184.       end
  185.  
  186.       # Fadein
  187.       def fadein(time)
  188.         @@FrozenBitmap = Bitmap.new(Graphics.width, Graphics.height)
  189.         @@FrozenBitmap.fill_rect(@@FrozenBitmap.rect, Color.new(0, 0, 0))
  190.  
  191.         transition(time)
  192.       end
  193.  
  194.       # Fadeout
  195.       def fadeout(time)
  196.         inc = (255.0 / time)
  197.         time.times {
  198.           @@TransitionSprite.opacity += inc
  199.           Graphics.update
  200.         }
  201.       end
  202.  
  203.       # Armazena a imagem da tela
  204.       alias oldFullscreenResFreeze freeze
  205.       def freeze(*a, &b)
  206.         oldFullscreenResFreeze(*a, &b)
  207.         @@FrozenBitmap = Graphics.snap_to_bitmap
  208.       end
  209.  
  210.       # Realiza o redimensionamento de tela
  211.       alias gabFullscreenOldResizeScreen resize_screen
  212.       def resize_screen(*a, &b)
  213.         # Redimensiona normalmente
  214.         gabFullscreenOldResizeScreen(*a, &b)
  215.         # Redimensiona o sprite de transição
  216.         @@TransitionSprite.bitmap.dispose
  217.         @@TransitionSprite.bitmap = Bitmap.new(*Graphics.size)
  218.         @@TransitionSprite.bitmap.fill_rect(@@TransitionSprite.bitmap.rect, Color.new(0, 0, 0))
  219.  
  220.         if Graphics::PlaneSpeedUp
  221.           # Manda o sinal de atualização para todas as instâncias da classe Plane
  222.           ObjectSpace.each_object(Plane){|plane|
  223.             plane.send(:recreateBitmap)
  224.           }
  225.         end
  226.       end
  227.  
  228.       # Altera para fullscreen
  229.       def fullscreen
  230.         # Retorna se já estiver em fullscreen
  231.         return if @@inFullscreen
  232.         # Tamanho antes do fullscreen
  233.         rect = DL::CPtr.malloc(16)
  234.         rect[0, 16] = 0.chr * 16
  235.         GetWindowRect.call([@@hWnd, rect])
  236.         @@windowSize = rect[0, 16].unpack("l*")
  237.         @@windowSize[2] -= @@windowSize[0]
  238.         @@windowSize[3] -= @@windowSize[1]
  239.         @@windowResolution = Graphics.size
  240.         # Muda o tamanho da tela
  241.         Graphics.resize_screen(*@@screenSize)
  242.         # Remover bordas da janela
  243.         SetWindowLong.call([@@hWnd, -16, 0x14000000])
  244.         # Coloca a janela acima de todas as outras
  245.         SetWindowPos.call([@@hWnd, -1, 0, 0, *@@screenSize, 0])
  246.         # Modifica a flag de fullscreen
  247.         @@inFullscreen = true
  248.         # Espera alguns frames para terminar o processamento
  249.         Graphics.wait(5)
  250.       end
  251.  
  252.       # Altera para modo janela
  253.       def windowed
  254.         # Retorna se não estiver em fullscreen
  255.         return unless @@inFullscreen
  256.         # Muda o tamanho da tela
  257.         Graphics.resize_screen(*@@windowResolution)
  258.         # Recoloca bordas da janela
  259.         SetWindowLong.call([@@hWnd, -16, 0x14CA0000])
  260.         # Coloca a janela na posição x,y,z comum e ajusta seu tamanho
  261.         SetWindowPos.call([@@hWnd, 0, *@@windowSize, 0])
  262.         # Modifica a flag de fullscreen
  263.         @@inFullscreen = false
  264.         # Espera alguns frames para terminar o processamento
  265.         Graphics.wait(5)
  266.       end
  267.  
  268.       # Tamanho da tela
  269.       def size
  270.         [self.width, self.height]
  271.       end
  272.  
  273.       # Verifica se a janela está no modo fullscreen
  274.       def fullscreen?
  275.         return @@inFullscreen
  276.       end
  277.  
  278.       # Verifica se a janela está no modo janela
  279.       def windowed?
  280.         return !@@inFullscreen
  281.       end
  282.  
  283.       # Alterna entre os modos fullscreen e janela
  284.       def toggleFullscreen
  285.         @@inFullscreen ? self.windowed : self.fullscreen
  286.       end
  287.     end
  288.   end
  289. end
  290.  
  291. if Graphics::PlaneSpeedUp
  292.   # Remove a classe Plane Anterior
  293.   Object.send(:remove_const, :Plane)
  294.   # Redefinição da classe Plane
  295.   class Plane
  296.     attr_reader :viewport
  297.     attr_reader :bitmap
  298.     attr_reader :ox
  299.     attr_reader :oy
  300.     attr_reader :opacity
  301.     attr_reader :blend_type
  302.     attr_reader :color
  303.     attr_reader :tone
  304.     attr_reader :visible
  305.     attr_reader :zoom_x
  306.     attr_reader :zoom_y
  307.     attr_reader :z
  308.  
  309.     # Inicialização do objeto
  310.     def initialize(viewport = nil)
  311.       # É necessário verificar se um viewport foi enviado. Desse modo, ao mudar a
  312.       # resolução da tela, deve-se mudar também a rect do viewport para que o
  313.       # Plane que ocupava a tela toda continue
  314.       @defaultViewport = !viewport.is_a?(Viewport)
  315.       @viewport = @defaultViewport ? Viewport.new(0, 0, *Graphics.size) : viewport
  316.  
  317.       @sprite        = Sprite.new(@viewport)
  318.       @bitmap        = nil
  319.       @ox            = @sprite.ox         # 0
  320.       @oy            = @sprite.oy         # 0
  321.       @opacity       = @sprite.opacity    # 255
  322.       @blend_type    = @sprite.blend_type # 0
  323.       @color         = @sprite.color      # Color.new(0, 0, 0, 0)
  324.       @tone          = @sprite.tone       # Tone.new(0, 0, 0, 0)
  325.       @visible       = @sprite.visible    # true
  326.       @z             = @sprite.z          # 0
  327.       @zoom_x        = @sprite.zoom_x     # 1.0
  328.       @zoom_y        = @sprite.zoom_y     # 1.0
  329.     end
  330.  
  331.     def bitmap=(bitmap)
  332.       return unless bitmap.is_a?(Bitmap)
  333.       @bitmap = bitmap
  334.       self.recreateBitmap(true)
  335.     end
  336.  
  337.     def ox=(value)
  338.       @ox = value
  339.       return if @bitmap.nil?
  340.       @sprite.ox = (value % @bitmap.width)
  341.     end
  342.  
  343.     def oy=(value)
  344.       @oy = value
  345.       return if @bitmap.nil?
  346.       @sprite.oy = (value % @bitmap.height)
  347.     end
  348.  
  349.     def opacity=(value)
  350.       @sprite.opacity = value
  351.       @opacity = @sprite.opacity
  352.     end
  353.  
  354.     def blend_type=(value)
  355.       @sprite.blend_type = value
  356.       @blend_type = @sprite.blend_type
  357.     end
  358.  
  359.     def color=(value)
  360.       @sprite.color = value
  361.       @color = @sprite.color
  362.     end
  363.  
  364.     def tone=(value)
  365.       @sprite.tone = value
  366.       @tone = @sprite.tone
  367.     end
  368.  
  369.     def viewport=(value)
  370.       @defaultViewport &= (value == @sprite.viewport)
  371.       @sprite.viewport = value
  372.       @viewport = @sprite.viewport
  373.     end
  374.  
  375.     def visible=(value)
  376.       @sprite.visible = value
  377.       @visible = sprite.visible
  378.     end
  379.  
  380.     def z=(value)
  381.       @sprite.z = value
  382.       @z = @sprite.z
  383.     end
  384.  
  385.     def zoom_x=(value)
  386.       @sprite.zoom_x = value
  387.       @zoom_x = @sprite.zoom_x
  388.       self.recreateBitmap
  389.     end
  390.  
  391.     def zoom_y=(value)
  392.       @sprite.zoom_y = value
  393.       @zoom_y = @sprite.zoom_y
  394.       self.recreateBitmap
  395.     end
  396.  
  397.     def disposed?
  398.       return @sprite.disposed?
  399.     end
  400.  
  401.     def dispose
  402.       @sprite.dispose
  403.     end
  404.  
  405.     protected
  406.  
  407.     def recreateBitmap(forceRefresh = false)
  408.       cw, ch      = Graphics.width * (2.0/@zoom_x), Graphics.height * (2.0/@zoom_y)
  409.       needRefresh = true
  410.  
  411.       if @defaultViewport
  412.         @viewport.rect.width, @viewport.rect.height = *Graphics.size
  413.       end
  414.  
  415.       if @sprite.bitmap.nil? or @sprite.bitmap.disposed?
  416.         newBitmap = Bitmap.new(cw, ch)
  417.       else
  418.         if (cw == @sprite.bitmap.width) and (ch == @sprite.bitmap.height) and (!forceRefresh)
  419.           return
  420.         end
  421.  
  422.         newBitmap = Bitmap.new(cw, ch)
  423.         if (cw < @sprite.bitmap.width) and (ch < @sprite.bitmap.height)
  424.           newBitmap.blt(0, 0, @sprite.bitmap, @sprite.bitmap.rect)
  425.           @sprite.bitmap.dispose
  426.           needRefresh = false
  427.         end
  428.       end
  429.  
  430.       @sprite.bitmap = newBitmap
  431.       self.refreshBitmap if needRefresh or forceRefresh
  432.     end
  433.  
  434.     def refreshBitmap
  435.       # Limpa o bitmap
  436.       b = @sprite.bitmap
  437.       b.clear
  438.  
  439.       return if @bitmap.nil?
  440.  
  441.       # Quantia de espaços para blt
  442.       tx = (b.width  / @bitmap.width.to_f )
  443.       ty = (b.height / @bitmap.height.to_f)
  444.  
  445.       b.blt(0, 0, @bitmap, @bitmap.rect)
  446.  
  447.       return if tx + ty == 2
  448.  
  449.       # Preenche 1 linha
  450.       basePow = @bitmap.width
  451.       baseRct = Rect.new(0, 0, @bitmap.width, @bitmap.height)
  452.  
  453.       Math.log2(tx).floor.times{
  454.         b.blt(basePow, 0, b, baseRct)
  455.         baseRct.width += basePow
  456.         basePow *= 2
  457.       }
  458.  
  459.       # Último bitmap da linha
  460.       baseRct.width = (b.width - baseRct.width)
  461.       b.blt(basePow, 0, b, baseRct)
  462.  
  463.       # Preenche o restante das linhas
  464.       basePow = @bitmap.height
  465.       baseRct = Rect.new(0, 0, b.width, @bitmap.height)
  466.  
  467.       Math.log2(ty).floor.times{
  468.         b.blt(0, basePow, b, baseRct)
  469.         baseRct.height += basePow
  470.         basePow *= 2
  471.       }
  472.  
  473.       # Última linha
  474.       baseRct.height = b.height - baseRct.height
  475.       b.blt(basePow, 0, b, baseRct)
  476.     end
  477.   end
  478. end
  479.  
  480. class Game_Map
  481.   # Número de tiles horizontais na tela
  482.   def screen_tile_x
  483.     (Graphics.width / 32.0).ceil
  484.   end
  485.  
  486.   # Número de tiles verticais na tela
  487.   def screen_tile_y
  488.     (Graphics.height / 32.0).ceil
  489.   end
  490. end
  491.  
  492. # Contador de FPS para o modo Fullscreen
  493. if $TEST
  494.   class << Graphics
  495.     @@FPSSprite = Sprite.new
  496.     @@FPSSprite.bitmap = Bitmap.new(100, 25)
  497.     @@FPSSprite.x = 10
  498.     @@FPSSprite.y = 10
  499.     @@FPSSprite.z = 0x7FFFFFFF
  500.     @@FPSTime  = Time.new.to_f
  501.     @@FPSCount = 0
  502.  
  503.     alias oldFullscreenFPSupdate update
  504.     def update(*a, &b)
  505.       oldFullscreenFPSupdate(*a, &b)
  506.  
  507.       @@FPSCount += 1
  508.       time = Time.new.to_f
  509.  
  510.       if (time - @@FPSTime >= 1)
  511.         if (@@FPSSprite.visible)
  512.           @@FPSSprite.bitmap.clear
  513.           @@FPSSprite.bitmap.fill_rect(@@FPSSprite.bitmap.rect, Color.new(0, 0, 0, 127))
  514.           @@FPSSprite.bitmap.draw_text(@@FPSSprite.bitmap.rect, "#{@@FPSCount} FPS", 1)
  515.         end
  516.  
  517.         @@FPSTime = time
  518.         @@FPSCount = 0
  519.       end
  520.  
  521.       @@FPSSprite.visible ^= true if Input.trigger?(:F5)
  522.     end
  523.   end
  524. end
  525.  
  526. #==============================================================================
  527. # ▼ Viewports/Map Fix for Modified RGSS300.dll File
  528. #   Origin of Code: Yanfly Engine Ace - Ace Core Engine v1.06
  529. # -- Last Updated: 2011.12.26
  530. # -- Level: Easy, Normal
  531. # -- Requires: n/a
  532. #==============================================================================
  533.  
  534. #==============================================================================
  535. # ■ Game_Map
  536. #==============================================================================
  537.  
  538. class Game_Map
  539.  
  540.   #--------------------------------------------------------------------------
  541.   # overwrite method: scroll_down
  542.   #--------------------------------------------------------------------------
  543.   def scroll_down(distance)
  544.     if loop_vertical?
  545.       @display_y += distance
  546.       @display_y %= @map.height * 256
  547.       @parallax_y += distance
  548.     else
  549.       last_y = @display_y
  550.       dh = Graphics.height > height * 32 ? height : screen_tile_y
  551.       @display_y = [@display_y + distance, height - dh].min
  552.       @parallax_y += @display_y - last_y
  553.     end
  554.   end
  555.  
  556.   #--------------------------------------------------------------------------
  557.   # overwrite method: scroll_right
  558.   #--------------------------------------------------------------------------
  559.   def scroll_right(distance)
  560.     if loop_horizontal?
  561.       @display_x += distance
  562.       @display_x %= @map.width * 256
  563.       @parallax_x += distance
  564.     else
  565.       last_x = @display_x
  566.       dw = Graphics.width > width * 32 ? width : screen_tile_x
  567.       @display_x = [@display_x + distance, width - dw].min
  568.       @parallax_x += @display_x - last_x
  569.     end
  570.   end
  571.  
  572. end # Game_Map
  573.  
  574. #==============================================================================
  575. # ■ Spriteset_Map
  576. #==============================================================================
  577.  
  578. class Spriteset_Map
  579.  
  580.   #--------------------------------------------------------------------------
  581.   # overwrite method: create_viewports
  582.   #--------------------------------------------------------------------------
  583.   def create_viewports
  584.     if Graphics.width > $game_map.width * 32 && !$game_map.loop_horizontal?
  585.       dx = (Graphics.width - $game_map.width * 32) / 2
  586.     else
  587.       dx = 0
  588.     end
  589.     dw = [Graphics.width, $game_map.width * 32].min
  590.     dw = Graphics.width if $game_map.loop_horizontal?
  591.     if Graphics.height > $game_map.height * 32 && !$game_map.loop_vertical?
  592.       dy = (Graphics.height - $game_map.height * 32) / 2
  593.     else
  594.       dy = 0
  595.     end
  596.     dh = [Graphics.height, $game_map.height * 32].min
  597.     dh = Graphics.height if $game_map.loop_vertical?
  598.     @viewport1 = Viewport.new(dx, dy, dw, dh)
  599.     @viewport2 = Viewport.new(dx, dy, dw, dh)
  600.     @viewport3 = Viewport.new(dx, dy, dw, dh)
  601.     @viewport2.z = 50
  602.     @viewport3.z = 100
  603.   end
  604.  
  605.   #--------------------------------------------------------------------------
  606.   # new method: update_viewport_sizes
  607.   #--------------------------------------------------------------------------
  608.   def update_viewport_sizes
  609.     if Graphics.width > $game_map.width * 32 && !$game_map.loop_horizontal?
  610.       dx = (Graphics.width - $game_map.width * 32) / 2
  611.     else
  612.       dx = 0
  613.     end
  614.     dw = [Graphics.width, $game_map.width * 32].min
  615.     dw = Graphics.width if $game_map.loop_horizontal?
  616.     if Graphics.height > $game_map.height * 32 && !$game_map.loop_vertical?
  617.       dy = (Graphics.height - $game_map.height * 32) / 2
  618.     else
  619.       dy = 0
  620.     end
  621.     dh = [Graphics.height, $game_map.height * 32].min
  622.     dh = Graphics.height if $game_map.loop_vertical?
  623.     rect = Rect.new(dx, dy, dw, dh)
  624.     for viewport in [@viewport1, @viewport2, @viewport3]
  625.       viewport.rect = rect
  626.     end
  627.   end
  628.  
  629. end # Spriteset_Map
  630.  
  631. #==============================================================================
  632. # ■ Scene_Map
  633. #==============================================================================
  634.  
  635. class Scene_Map < Scene_Base
  636.  
  637.   #--------------------------------------------------------------------------
  638.   # alias method: post_transfer
  639.   #--------------------------------------------------------------------------
  640.   alias scene_map_post_transfer_ace post_transfer
  641.   def post_transfer
  642.     @spriteset.update_viewport_sizes
  643.     scene_map_post_transfer_ace
  644.   end
  645.  
  646. end # Scene_Map
  647.  
  648. #==============================================================================
  649. # ■ Game_Event
  650. #==============================================================================
  651.  
  652. class Game_Event < Game_Character
  653.  
  654.   #--------------------------------------------------------------------------
  655.   # overwrite method: near_the_screen?
  656.   #--------------------------------------------------------------------------
  657.   def near_the_screen?(dx = nil, dy = nil)
  658.     dx = [Graphics.width, $game_map.width * 256].min/32 - 5 if dx.nil?
  659.     dy = [Graphics.height, $game_map.height * 256].min/32 - 5 if dy.nil?
  660.     ax = $game_map.adjust_x(@real_x) - Graphics.width / 2 / 32
  661.     ay = $game_map.adjust_y(@real_y) - Graphics.height / 2 / 32
  662.     ax >= -dx && ax <= dx && ay >= -dy && ay <= dy
  663.   end
  664.  
  665. end # Game_Event
  666.  
  667. # Chama o método que realiza a mudança de tamanho
  668. #Graphics.fullscreen
  669. Graphics.resize_screen(1024, 600)
  670.  
  671. __END__
  672. # TESTES
  673. # Graphics.windowed
  674. x = Bitmap.new(50, 50)
  675. x.gradient_fill_rect(0,  0, 50, 25, Color.new(255, 0, 0), Color.new(0, 255, 0))
  676. x.gradient_fill_rect(0, 25, 50, 25, Color.new(0, 255, 0), Color.new(0, 0, 255))
  677. y = Plane.new
  678. y.bitmap = x
  679. Graphics.fullscreen
  680. #Graphics.windowed
  681. loop do
  682.   Graphics.update
  683.   y.ox += 1
  684.   y.oy += 1
  685. end

点评

这并没有提高分辨率……能同时显示在游戏画面的像素点数量并没有改变  发表于 2018-5-4 07:04
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7427
在线时间
948 小时
注册时间
2017-9-27
帖子
583
3
发表于 2018-5-4 13:16:19 | 只看该作者
可见像素不变?那谁能告诉我,下面这两张图的可见像素是一样的吗?
回复 支持 0 反对 1

使用道具 举报

Lv2.观梦者

梦石
0
星屑
501
在线时间
65 小时
注册时间
2018-4-15
帖子
22
4
 楼主| 发表于 2018-5-4 15:37:57 | 只看该作者
梦想家大魔王 发表于 2018-5-4 13:16
可见像素不变?那谁能告诉我,下面这两张图的可见像素是一样的吗?

我用了这个脚本之后FPS降到8= =

点评

那是你太贪心了,窗口弄得太大了吧。  发表于 2018-5-4 16:27
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
501
在线时间
65 小时
注册时间
2018-4-15
帖子
22
5
 楼主| 发表于 2018-5-6 21:54:11 | 只看该作者
我用RMMV好了
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4598
在线时间
1206 小时
注册时间
2016-4-7
帖子
982

开拓者

6
发表于 2018-5-6 23:58:29 | 只看该作者

点评

现在去找别的脚本,有一种49年入国军的感觉  发表于 2018-5-7 00:38
附庸的附庸不是我的附庸,女儿的女儿还是我的女儿。CK2沉迷ing
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-17 06:42

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表