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

Lune Smooth Camera Slide

Iniciado por Raizen, 14/03/2013 às 18:48

14/03/2013 às 18:48 Última edição: 20/02/2015 às 14:29 por Raizen
Lune Smooth Camera Slide

Compativel com: RMVXAce
Compatibilidade :bom
Facilidade de uso: fácil
Lag gerado: nulo
[box class=titlebg]
Condições de Uso
[/box]
  Pode ser modificado, e divulgado, mas mantenha os créditos a mim obrigado.

[box class=titlebg]
Para que serve o script
[/box]
  O script adiciona um movimento de câmera bem mais suave que o padrão, dando um ar mais profissional ao jogo.

Um agradecimento especial ao Gerar que deu a ideia :D.

[box class=titlebg]
Script.
[/box]

#=======================================================
#         Lune Smooth Camera Sliding
# Autor: Raizen
# Comunidade: www.centrorpg.com
# O script permite um deslizar bem suave da tela sempre
# que o personagem se mover, dá um efeito bem mais profissional ao jogo.
#=======================================================
module Lune_cam_slide
# Constante de deslize, quanto maior o deslize será mais rápido.(padrão = 0.001)
Slide = 0.001

# Para colocar o foco da camêra em um personagem
# basta Chamar Script: set_camera_focus(id)
# aonde id é o id do evento, para voltar ao personagem basta
# colocar o id como 0.

end



#==============================================================================
# ** Game_Player
#------------------------------------------------------------------------------
#  Esta classe gerencia o jogador. 
# A instância desta classe é referenciada por $game_player.
#==============================================================================

class Game_Player < Game_Character
alias :lune_camera_slide_initialize :initialize
  #--------------------------------------------------------------------------
  # * Inicialização do objeto
  #--------------------------------------------------------------------------
  def initialize(*args)
    @camera_slide_focus = 0
    lune_camera_slide_initialize(*args)
  end
  #--------------------------------------------------------------------------
  # * Atualização da rolagem
  #     last_real_x : ultima coordenada X real
  #     last_real_y : ultima coordenada Y real
  #--------------------------------------------------------------------------
  def update_scroll(last_real_x, last_real_y)
    return if $game_map.scrolling?
    if @camera_slide_focus == 0
      screen_focus_x = screen_x
      screen_focus_y = screen_y
    else
      screen_focus_x = $game_map.events[@camera_slide_focus].screen_x
      screen_focus_y = $game_map.events[@camera_slide_focus].screen_y
    end
    sc_x = (screen_focus_x - Graphics.width/2).abs
    sc_y = (screen_focus_y - 16 - Graphics.height/2).abs
    $game_map.scroll_down(Lune_cam_slide::Slide*sc_y) if screen_focus_y - 16 > Graphics.height/2
    $game_map.scroll_left(Lune_cam_slide::Slide*sc_x) if screen_focus_x < Graphics.width/2
    $game_map.scroll_right(Lune_cam_slide::Slide*sc_x) if screen_focus_x > Graphics.width/2
    $game_map.scroll_up(Lune_cam_slide::Slide*sc_y) if screen_focus_y - 16 < Graphics.height/2
  end
  def set_camera_focus(event = 0)
    @camera_slide_focus = event
  end
end


#==============================================================================
# ** Spriteset_Map
#------------------------------------------------------------------------------
#  Esta classe reune os sprites da tela de mapa e tilesets. Esta classe é
# usada internamente pela classe Scene_Map. 
#==============================================================================

class Spriteset_Map
    #--------------------------------------------------------------------------
  # * Atualização do tilemap
  #--------------------------------------------------------------------------
  def update_tilemap
    @tilemap.map_data = $game_map.data
    @tilemap.ox = ($game_map.display_x * 32)
    @tilemap.oy = ($game_map.display_y * 32)
    @tilemap.ox += 1 if $game_map.adjust_tile_slide_x
    @tilemap.oy += 1 if $game_map.adjust_tile_slide_y
    @tilemap.update
  end
end
#==============================================================================
# ** Game_Map
#------------------------------------------------------------------------------
#  Esta classe gerencia o mapa. Inclui funções de rolagem e definição de 
# passagens. A instância desta classe é referenciada por $game_map.
#==============================================================================

class Game_Map
  #--------------------------------------------------------------------------
  # * Variáveis públicas
  #--------------------------------------------------------------------------
  def adjust_tile_slide_x
    @display_x != 0 && @display_x != (@map.width - screen_tile_x) && !scrolling?
  end
  def adjust_tile_slide_y
    @display_y != 0 && @display_y != (@map.height - screen_tile_y) && !scrolling?
  end
end
#==============================================================================
# ** Game_Interpreter
#------------------------------------------------------------------------------
#  Um interpretador para executar os comandos de evento. Esta classe é usada
# internamente pelas classes Game_Map, Game_Troop e Game_Event.
#==============================================================================

class Game_Interpreter
  def set_camera_focus(event = 0)
    $game_player.set_camera_focus(event)
  end
end


[box class=titlebg]
Videos
[/box]



[box class=titlebg]
Download
[/box]

Não necessário

[box class=titlebg]
Primeiros-Socorros
[/box]

  • Apenas um, se o personagem estiver fugindo da tela, ou a tela não estiver acompanhando, não saia muito do valor padrão (0.001) pois a câmera pode ficar muito rápida ou muito lenta :)

    [box class=titlebg]
    Créditos e Avisos
    [/box]

    Raizen

BEM Melhor que o movimento padrão da câmera. Você imaginaria que uma empresa como a Enterbrain pensaria nessas coisas antes de vender o produto '-'

 Ou cara bem pensando este script... O efeito é bem legal, depois irei ver como fica do DSi Core, se cair bem nele eu irei por ele no pack, claro se você deixar.



Realmente muito bonito o visual que dá Raizen. Eu sempre senti falta desses sistemas que eu acho muito bonitos para todos os makers, convenhamos que o movimento da câmera padrão não é muito agradável. Esse feito faz toda a diferença, parabéns Raizen sempre inovando \o
Mas eu tenho um toque pra te dar, que é algo que pode vir a atrapalhar o uso. Eu notei que se um mapa possui uma imagem, digamos assim, setada para acompanhar a tela, ou o herói no caso. Ela tem um movimento retardado, ao invés de continuar acompanhando o herói. Possilvemente por estar acompanhando a tela e.e

@yuki: vlws man, sim eu acho mais legal, mas vai saber o que a enterbrain pensa rs xD.

@Dax: fique a vontade :D.

@ Fallen: Bom eu não testei de fato o script, mas pelo que eu fiz.. se uma imagem estiver colocada para seguir a tela, bom ela vai seguir a tela, se fizer isso para as coordenadas do personagem, eu acho que mantém no personagem, já que eu só mexi na rolagem do mapa... tipo, se mostrar uma demo eu posso entender melhor sei lá xD, vlws o comment ^^

grande efeito cara, fica bem mais bonito o projeto deixando a camera mais suave.

Citação de: Yukii-kun online 14/03/2013 às 19:08
[...] Você imaginaria que uma empresa como a Enterbrain pensaria nessas coisas antes de vender o produto '-'

É isso que penso em relação à esse script e à um de batalha lateral...

Mas enfim... shoooooow mano!
Perfeito mesmo, melhor que a encomenda, mais uma vez, hehe...
E volto a dizer que fiquei de cara com o tamanho do código...
Mais um que não vai sair do meu maker. No mais, obrigado
mesmo por ter feito...
  :wow:

O movimento fica infinitamente melhor desta maneira mesmo. Eu havia visto um para RMXP que fazia um movimento similar porém um pouco diferente deste que fez, sempre adorei esta movimentação suave da câmera. :B

Ótimo script!

@rieper: realmente e muita gente nem tinha pensado nisso (tipo eu), mas o Gerar deu a ideia, então ai está  :wow:

@Gerar: qualquer problema, tipo o do Fallen que vou tentar testar aqui para ver no que dá, só mandar :P.

@cristianoforce: sim sim, o do RMXP fazia algo assim k, depois vou ver se esse era muito diferente daquele xD, vlws o comment.

Olá camarada!
Acabei de ver o script na RMBN, e realmente é ótimo. Dá um efeito muito mais bonito e profissional.
Está de parabéns, até mais !

Acesse já o meu blog!(Novo)

Pode me ajudar? Eu uso o efeito movimento de tela (via evento) e esse scritpt ta bugando o movimento. Gostaria de desativa-lo temporariamente, até o movimento de tela (via evento) passar e depois ativa-lo denovo.

Vlw!

Citação de: ararod05 online 28/02/2014 às 15:24
Pode me ajudar? Eu uso o efeito movimento de tela (via evento) e esse scritpt ta bugando o movimento. Gostaria de desativa-lo temporariamente, até o movimento de tela (via evento) passar e depois ativa-lo denovo.

Vlw!
Cara vou dar uma procurada, realmente aqui não tem, porém eu fiz uma versão que tinha sim switch, vou procurar aqui e vejo se acho, se eu achar eu edito o tópico e te mando uma mensagem da versão :)

Tenho um problema aqui, não sei como explicar isso sem usar imagens, mas vou tentar!

Então vamos lá:

Spoiler
Eu costumo usar eventos para completar as árvores, quando são diferentes e ficam muito perto uma da outra, já que o Ace não tem aquele baganayte de camadas do XP.

Acontece que o movimento da câmera move o evento da árvore. Ele se desloca um pixel mais ou menos. Se você ficar andando em volta, a metade evento da árvore dá uma escapada para cima, e dependendo do lugar que você pisa ela volta para o lugar certo. Tem algum jeito de corrigir isso?
[close]

Raizen, eu vou bater umas fotos e postar aqui, pra poder especificar melhor esse problema.

to ligado desse bug,  :=|:

eu ia corrigir, mas tive uns contra-tempos, vou tentar arrumar assim que possível.

Muito bom mesmo, isso era uma das coisas que tava faltando ai no fórum.  :XD: