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

MS - Parallax Mapping

Iniciado por Brandt, 07/05/2014 às 00:32

[box2 class=titlebg]
MS - Parallax Mapping
[/box2]

[box2 class=titlebg title=Introdução]Eu já vi alguns scripts de mapeamento por parallax (ou overlay, sei lá...) por aí, e achei a ideia bem interessante, além disso, já vi mapas incríveis feitos usando essa técnica, aí, decidi criar um script para facilitar a aplicação desse tipo de técnica no jogo[/box2]

[box2 class=titlebg title=Características]O script permite, claro, o mapeamento por parallax, ele permite que se crie quantas camadas forem necessárias, definir se a camada ficará acima ou abaixo do player, qual a prioridade dela em relação às outras e também definir uma switch para mostrar/esconder a camada, quase tudo é opcional no script, assim não é necessário criar imagens em branco e afins.[/box2]

[box2 class=titlebg title=Instruções]No script, nos comentários em verde[/box2]

[box2 class=titlebg title=Screenshots]
Como não sou bom mapper, e não vi outra forma de mostrar as possibilidades do script, peguei um mapa do projeto Pirate Rush, do Galv, para dar exemplo, mas vale ressaltar que não fui eu que fiz o mapa:
É óbvio que o mapa do Galv não foi feito usando meu script, mas é bem possível recriar esse mapa usando ele
[/box2]

[box2 class=titlebg title=Script]
#==============================================================================
# MS - Parallax Mapping
#------------------------------------------------------------------------------
# por Masked
#==============================================================================
#==============================================================================
# Instruções
#------------------------------------------------------------------------------
# Primeiro, crie uma pasta 'Overlay' (sem aspas) dentro da pasta 'Graphics' do 
# seu projeto, depois, crie as camadas do mapa usando um programa de edição de
# imagem com suporte para transparência, e ponha o arquivo na pasta que você
# criou, o nome do arquivo deve ser 'Map00X_sufixo' (sem aspas), ou seja, a 
# camada '_ground' (layer1) do mapa de número 1 deve ter um arquivo com nome
# 'Map001_ground' na pasta.
#==============================================================================
($imported ||= {})[:ms_parallax] = true
#==============================================================================
# Configurações
#==============================================================================
module MS_ParallaxMapping
  
  #--------------------------------------------------------------------------
  # Configurações das camadas
  #--------------------------------------------------------------------------
  # Para criar novas camadas, basta adicionar um novo item à lista de 
  # camadas, o item deve seguir o modelo:
  # nome_da_camada: ["_sufixo","down/up",z]
  # no caso, o nome_da_camada pode ser qualquer um, o sufixo também, o 
  # down/up significa que pode ser down ou up, down fará a imagem ficar 
  # abaixo do jogador e up fará ela ficar acima, caso esse item fuja do 
  # padrão proposto, será assumido o valor como "up".
  # O z é opcional, e define a prioridade de cada camada, uma camada com z 1
  # fica acima de outra com z 0
  #--------------------------------------------------------------------------
  Layers = {
    layer1: ["_ground","down"],
    layer11: ["_ground2","down",50],
    layer2: ["_overlay","up"],
  }
  
  #--------------------------------------------------------------------------
  # Configurações das switches
  #--------------------------------------------------------------------------
  # As switches são as switches que fazem as camadas aparecerem ou não, se
  # a switch estiver ligada, a camada aparece.
  #
  # A switch deve ser configurada para a respectiva camada, com o mesmo nome
  # usado na 'Layers', da configuração das camadas, para definir a switch, 
  # apenas ponha o ID dela depois do nome da camda
  #--------------------------------------------------------------------------
  Switches = {
    layer1: 1,
    layer11: 1,
    layer2: 2,
  }
  
end
#==============================================================================
# Fim das Configurações
#==============================================================================
#==============================================================================
# ** Spriteset_Map
#==============================================================================
class Spriteset_Map
  
  attr_accessor :layers
  
  alias ms_initlz initialize
  alias ms_updt update
  alias ms_crtvwprts create_viewports
  alias ms_updvwprts update_viewports
  
  #--------------------------------------------------------------------------
  # * Inicialização do objeto
  #--------------------------------------------------------------------------
  def initialize
    create_viewports
    create_tilemap
    create_parallax
    create_characters
    create_shadow
    create_weather
    create_pictures
    create_timer
    create_layers
    update
  end
  #--------------------------------------------------------------------------
  # * Criação do viewport
  #--------------------------------------------------------------------------
  def create_viewports
    ms_crtvwprts
    @viewport0 = Viewport.new
    @viewport_down = Viewport.new
    @viewport_up = Viewport.new
    @viewport0.z = -50
    @viewport_down.z = -10
    @viewport_up.z = 150
  end
  #--------------------------------------------------------------------------
  # * Criação do tilemap
  #--------------------------------------------------------------------------
  def create_tilemap
    @tilemap = Tilemap.new(@viewport0)
    @tilemap.map_data = $game_map.data
    load_tileset
  end
  #--------------------------------------------------------------------------
  # * Criação das camadas de imagens do mapa
  #--------------------------------------------------------------------------
  def create_layers
    
    @layers = {}
    
    MS_ParallaxMapping::Layers.each {|layer|
           
      @layers[layer[0]] = Sprite.new(layer[1][1] == "down" ? @viewport_down : @viewport_up)
      @layers[layer[0]].z = layer[1][2] unless layer[1][2].nil?
      @layers[layer[0]].bitmap = Cache.overlay(sprintf("Map%03d",$game_map.map_id) + layer[1][0])
      
    }
    
  end
  #--------------------------------------------------------------------------
  # * Atualização da tela
  #--------------------------------------------------------------------------
  def update
    ms_updt
    update_layers
  end
  #--------------------------------------------------------------------------
  # * Atualização das camadas
  #--------------------------------------------------------------------------
  def update_layers
    MS_ParallaxMapping::Layers.each {|layer|
      @layers[layer[0]].visible = MS_ParallaxMapping::Switches[layer[0]] ? $game_switches[MS_ParallaxMapping::Switches[layer[0]]] : true
      @layers[layer[0]].ox = $game_map.display_x*32
      @layers[layer[0]].oy = $game_map.display_y*32
    }
  end
  #--------------------------------------------------------------------------
  # * Atualização dos viewports
  #--------------------------------------------------------------------------
  def update_viewports
    ms_updvwprts
    
    @viewport0.ox = $game_map.screen.shake
    @viewport_down.ox = $game_map.screen.shake
    @viewport_up.ox = $game_map.screen.shake
    
    @viewport0.update
    @viewport_down.update
    @viewport_up.update
    
  end
end
#==============================================================================
# ** Cache
#==============================================================================
module Cache
  #--------------------------------------------------------------------------
  # * Carregamento dos gráficos de overlay
  #--------------------------------------------------------------------------
  def self.overlay(filename)
    
    exists = false
    
    Dir.entries("Graphics/Overlay/").each {|file|
      if file =~ /#{filename}\.[[:ascii:]]*/
        exists = true
        break
      end
    }
    
    exists ? load_bitmap("Graphics/Overlay/",filename) : empty_bitmap
  end
end
Cole acima do main[/box2]

[box2 class=titlebg title=Créditos e Agradecimentos]- A mim, por criar e disponibilizar;
- Ao Galv, pelo mapa que eu usei de exemplo.[/box2]
~ Masked

É Muito bom ter um script dessa complexidade feito por um brasileiro brbrhuehue?
principalmente com essas funcionalidades, que pra mim torna o script superior ao do Yami, parabéns tio!  :XD:

07/05/2014 às 10:11 #2 Última edição: 03/01/2016 às 03:22 por Alisson
Mais um script de parallax. Eu acho que quanto mais o maker tiver controle sobre as camadas, melhor será para fazer mapas animados.
Ficou muito bom mesmo e merece meus parabéns.
Bye

Opa, valeu pelos comentários pessoal.

@Simon: brbrbr sim, eu fiz o script principalmente pra acabar com a limitação de camadas do script do Yami, sempre achei ruim essa limitação, além de treinar um pouco...

@Alisson: Ah, sim, pretendo adicionar mais umas funções marotas aí, como fazer ondulação no mapa, mudar a imagem da camada pra dar efeito de animação, enfim, umas coisas interessantes, assim que tiver tempo eu atualizo o script, obrigado pela dica.
~ Masked

Estou tendo um problema com esse script.
quando você usa um evento de teletransporte para outro mapa a imagem em parallax não troca. Fica com a mesma imagem do outro mapa. Não atualiza vamos dizer assim.
É algum bug ou erro meu?

Esse Script faz esse milagre como dá imagem? o.O
Como uso isso?' :O
JeSuS está voltando! Volte para ele antes!