Printscreen

2 Respostas   253 Visualizações

0 Membros e 1 Visitante estão vendo este tópico.

CDCyoshi

Tópico criado em: 04/03/2015 às 09:46 - Última modificação por CDCyoshi em 04/03/2015 às 15:03

Pode ser bem inutil, mas acho que no meu jogo WAR-aait (http://centrorpg.com/index.php?topic=11390.0) que vai ter varios finais e historias, seria legal ter uma ferramenta de printscreen  in-game para tipo registrar que pegou tal final e etc... Tem alguma por ai pra VXace?

♦Gifts♦

Brandt

Resposta 1: 04/03/2015 às 10:54

Não sabia de nenhum script assim (conheço scripts que tiram print do mapa inteiro, mas não isso), então fiz um:
Código: [Selecionar]
#==============================================================================
# MBS - Printscreen
#------------------------------------------------------------------------------
# por Masked
#==============================================================================
($imported ||= {})[:mbs_printscreen] = true
#==============================================================================
# >> MBS
#==============================================================================
module MBS
  #============================================================================
  # >> Screenshot
  #============================================================================
  module Screenshot
    #==========================================================================
    # Configurações
    #==========================================================================
   
    # Tecla que chama o print
    KEY = :F2
   
    # Nome da pasta onde ficam os printscreen (pode estar vazio, nesse caso
    # os prints serão salvos na pasta raíz do jogo)
    FOLDER = 'Screenshots'
   
    # Nome padrão dos arquivos (o nome dos arquivos será nome + n + .png)
    BASENAME = 'print' # O nome dos arquivos será "printX.png"
   
    # SE a ser tocada quando uma screenshot é tirada (pode ser vazio)
    SE = 'Audio/SE/Chime2'
   
    #==========================================================================
    # Fim das configurações
    #==========================================================================
  end
end
#==============================================================================
# >> PNG
#------------------------------------------------------------------------------
# Qualquer classe que inclua este módulo deve redefinir o método 'get_rgba',
# 'width' e 'height', assim obtendo um método 'save_png', que quando chamado
# exporta o objeto como uma imagem PNG
#==============================================================================
module PNG
  private
  #----------------------------------------------------------------------------
  # * Criação do header do arquivo
  #----------------------------------------------------------------------------
  def make_header(file)
    # Número mágico
    file.write([0x89].pack('C'))
   
    # PNG
    file.write([0x50, 0x4E, 0x47].pack('CCC'))
   
    # Fim de linha estilo DOS para verificação de conversão DOS - UNIX
    file.write([0x0D, 0x0A].pack('CC'))
   
    # Caractere de fim de linha (DOS)
    file.write([0x1A].pack('C'))
   
    # Caractere de fim de linha (UNIX)
    file.write([0x0A].pack('C'))
  end
 
  #----------------------------------------------------------------------------
  # * Aquisição da soma mágica
  #----------------------------------------------------------------------------
  def checksum(string)
    Zlib.crc32(string)
  end
 
  #----------------------------------------------------------------------------
  # * Criação do chunk de cabeçalho
  #----------------------------------------------------------------------------
  def make_ihdr(file) 
    data = ''
   
    # Largura
    data += [self.width, self.height].pack('NN')
   
    # Bit depth (???)
    data += [0x8].pack('C')
   
    # Tipo de cor
    data += [0x6].pack('C')
   
    data += [0x0, 0x0, 0x0].pack('CCC')
   
    # Tamanho do chunk
    file.write([data.size].pack('N'))
   
    # Tipo de chunk
    file.write('IHDR')
   
    file.write(data)
   
    # Soma mágica
    file.write([checksum('IHDR' + data)].pack('N'))
  end
 
  #----------------------------------------------------------------------------
  # * Criação do chunk de dados
  #----------------------------------------------------------------------------
  def make_idat(file)   
    data = ''
   
    for y in 0...height
      data << "\0"
      for x in 0...width
        color = self.get_rgba(x, y)
        data << [color.red, color.green, color.blue, color.alpha].pack('C*')
      end
    end
   
    # Desinflamento (jeito legal de dizer compressão...) dos dados
    data = Zlib::Deflate.deflate(data)
   
    # Tamanho do chunk
    file.write([data.size].pack('N'))
   
    # Tipo de chunk
    file.write('IDAT')
   
    # Dados (a imagem)
    file.write(data)
   
    # Soma mágica
    file.write([checksum('IDAT' + data)].pack('N'))
  end
 
  #----------------------------------------------------------------------------
  # * Criação do chunk final
  #----------------------------------------------------------------------------
  def make_iend(file)
    # Tamanho do chunk
    file.write([0].pack('N'))
   
    # Tipo de chunk
    file.write('IEND')
   
    # Soma mágica
    file.write([checksum('IEND')].pack('N'))
  end
 
  public
 
  #----------------------------------------------------------------------------
  # * Aquisição do largura da imagem
  #----------------------------------------------------------------------------
  def width
    1
  end
 
  #----------------------------------------------------------------------------
  # * Aquisição da altura da imagem
  #----------------------------------------------------------------------------
  def height
    1
  end
 
  #----------------------------------------------------------------------------
  # * Aquisição da cor RGBA na coordenada XY
  #----------------------------------------------------------------------------
  def get_rgba
    Color.new(0,0,0,0)
  end
 
  #----------------------------------------------------------------------------
  # * Conversão do bitmap em um arquivo .png
  #----------------------------------------------------------------------------
  def save_png(filename)
    file = File.open(filename, 'wb')
   
    # Criação do cabeçalho
    make_header(file)
   
    # Criação do primeiro chunk
    make_ihdr(file)
   
    # Criação dos dados
    make_idat(file)
   
    # Criação do final
    make_iend(file)
    file.close
  end
end

#==============================================================================
# ** Bitmap
#==============================================================================
class Bitmap
 
  alias mbswdht width
  alias mbshght height
 
  #----------------------------------------------------------------------------
  # Inclusão do módulo PNG na classe Bitmap
  #----------------------------------------------------------------------------
  include PNG
 
  #----------------------------------------------------------------------------
  # * Aquisição da largura do bitmap
  #----------------------------------------------------------------------------
  def width
    mbswdht
  end
 
  #----------------------------------------------------------------------------
  # * Aquisição da altura do bitmap
  #----------------------------------------------------------------------------
  def height
    mbshght
  end
 
  #----------------------------------------------------------------------------
  # * Aquisição da cor RGBA na coordenada XY
  #----------------------------------------------------------------------------
  def get_rgba(x, y)
    get_pixel(x, y)
  end
end

#==============================================================================
# ** Scene_Base
#==============================================================================
class Scene_Base
 
  alias mbsscnbsupdt update
 
  #----------------------------------------------------------------------------
  # * Atualização do processo
  #----------------------------------------------------------------------------
  def update
    mbsscnbsupdt
    save_screenshot if Input.trigger?(MBS::Screenshot::KEY)
  end
 
  #----------------------------------------------------------------------------
  # * Salvamento de uma screenshot
  #----------------------------------------------------------------------------
  def save_screenshot
    folder = MBS::Screenshot::FOLDER
    basename = MBS::Screenshot::BASENAME
   
    Dir.mkdir(folder) unless FileTest.directory?(folder)
    n = Dir.entries(folder).inject(1) do |r, v|
      v =~ /^#{basename}\d+\.png$/ ? r + 1 : r
    end
    bitmap = Graphics.snap_to_bitmap
    Graphics.brightness = 0
    until Graphics.brightness == 255
      Graphics.brightness += 10
      Graphics.update
    end
    bitmap.save_png("#{folder}/#{basename}#{n}.png")
    Audio.se_play(MBS::Screenshot::SE)
  end
end

Qualquer coisa avise.
~ Masked

CDCyoshi

Resposta 2: 04/03/2015 às 15:02

Resolvido :lock:
♦Gifts♦