O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Correção de janela de save Vx Ace

Iniciado por hategum rpg, 06/01/2018 às 19:02

06/01/2018 às 19:02 Última edição: 06/01/2018 às 21:43 por Corvo
Eu não consigo fazer com que a linha de save começe logo onde a anterior termina, na minha imagem as linhas de save sobrepõe um pedaço da linha anterior. Gostaria de acertar isso, digo, gostaria das linhas as "janelas" corretas... o que eu alterei no script foi o +15 pra dar espaço do personagem aparecer, mas ai as janelas ficaram desordenadas.



#==============================================================================
# ■ Window_SaveFile
#------------------------------------------------------------------------------
#  セーブ画面およびロード画面で表示する、セーブファイルのウィンドウです。
#==============================================================================

class Window_SaveFile < Window_Base
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_reader   :selected                 # 選択状態
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #     index : セーブファイルのインデックス
  #--------------------------------------------------------------------------
  def initialize(height, index)
    super(0, index * height , Graphics.width , height + 15)
    @file_index = index
    refresh
    @selected = false
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    change_color(normal_color)
    name = Vocab::File + " #{@file_index + 1}"
    draw_text(4, 0, 200, line_height , name)
    @name_width = text_size(name).width
    draw_party_characters(152, 75)
    draw_playtime(-60, contents.height - line_height, contents.width - 4, 2)
  end
  #--------------------------------------------------------------------------
  # ● パーティキャラの描画
  #--------------------------------------------------------------------------
  def draw_party_characters(x, y)
    header = DataManager.load_header(@file_index)
    return unless header
    header[:characters].each_with_index do |data, i|
      draw_character(data[0], data[1], x + i * 48, y)
    end
  end
  #--------------------------------------------------------------------------
  # ● プレイ時間の描画
  #--------------------------------------------------------------------------
  def draw_playtime(x, y, width, align)
    header = DataManager.load_header(@file_index)
    return unless header
    draw_text(x, y, width, line_height, header[:playtime_s], 2)
  end
  #--------------------------------------------------------------------------
  # ● 選択状態の設定
  #--------------------------------------------------------------------------
  def selected=(selected)
    @selected = selected
    update_cursor
  end
  #--------------------------------------------------------------------------
  # ● カーソルの更新
  #--------------------------------------------------------------------------
  def update_cursor
    if @selected
      cursor_rect.set(0, 0, @name_width + 8, line_height)
    else
      cursor_rect.empty
    end
  end
end

Em:
    super(0, index * height , Graphics.width , height + 15)

Você adicionou 15 ao valor de altura, mas não mudou a posição de origem Y da janela.
De maneira mais simples você teria que adicionar + 15 também no Y.
    super(0, index * height  + 15, Graphics.width , height + 15)

Mas isso vai deixar algumas coisas estranhas pois a primeira janela ficará 15px abaixo de onde deveria. Se você modificar a posição Y dela através da Scene_File será capaz de colocá-la de volta no lugar, mas posição das janelas em relação a tela ficará estranha por causa das dimensões, mas se você não se importar com isso...
Esse é o tipo de modificação que tem que ser totalmente calculada.

Aliás, uma ideia legal é evitar modificar direto o código original do jogo, porque assim você sempre vai tê-lo pra se basear caso aconteça algum erro ou coisa do tipo.

Eu fiz aqui rapidinho todas modificações necessárias para a janela não ficar uma encavalando a outra, porém ainda vai ter a questão da dimensão da tela, mas ai já é com você se vai querer manter isso ou não.
Código: Coloca isso na área de scripts adicionais
class Window_SaveFile < Window_Base
  
  def initialize(height, index)
    super(0, index * height + 15, Graphics.width, height + 15)
    @file_index = index
    refresh
    @selected = false
  end
  
end

class Scene_File < Scene_MenuBase
  
  def create_savefile_viewport
    @savefile_viewport = Viewport.new
    @savefile_viewport.rect.y = @help_window.height - 15
    @savefile_viewport.rect.height -= @help_window.height - 15
  end

end




06/01/2018 às 20:43 #2 Última edição: 06/01/2018 às 20:51 por hategum rpg
Eu modifiquei o script para que o char fosse mostrado completo ( estou usando o tamanho de tela normal e o save normal do ace)



normalmente sem a modificação ficava assim





Mas o grafico do personagem aparecia completo. sendo que a janela fica bugada.

no  draw_party_characters(152, 75) eu poderia ajustar a posição do char





pode ajeitar?

Esquece tudo que eu disse antes.

Esqueceu?  :fifufi:

Agora teste isso aqui:
class Window_SaveFile < Window_Base

  def standard_padding
    return 10
  end
  
  def refresh
    contents.clear
    change_color(normal_color)
    name = Vocab::File + " #{@file_index + 1}"
    draw_text(4, 0, 200, line_height, name)
    @name_width = text_size(name).width
    draw_party_characters(152, 75)
    draw_playtime(0, contents.height - line_height, contents.width - 4, 2)
  end
  
end


06/01/2018 às 21:37 #4 Última edição: 06/01/2018 às 21:43 por Corvo
Funciona perfeitamente  :wow:

Obrigado :XD: