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

Posição do Char

Iniciado por Lima, 10/10/2015 às 09:59

Como posso definir a posição do char?

Um char é do gênero



1 2 3
4 5 6
7 8 9
a b c

Como é que eu posso colocar o char na posição 3 através do definir rota do movimento, eu não quero que ele ande, quero é que fica naquela posição, é possível?

Se eu entendi, vc quer que o evento comece com o personagem na posição 2 que seria a posição de frente e parado certo?
E na sequencia queria que ele mudasse para a imagem 3 mas não se movesse/ficasse no mesmo lugar, certo?
Se é só isso, não acha mais fácil ativar uma "switch local A" por exemplo, e daí ele mudava para o gráfico 3, depois para voltar a posição original seria só desativar a Switch.
Não sei se eu entendi direito, mas se for só isso, acho que é possivel fazer assim..
Upei duas imagens aqui pra ve se explica melhor:



Espero ter ajudado :ok:

Eu estava fazendo por eventos, contudo os eventos só permitem no máximo 20 abas e eu vou precisar muito mais que isso, então precisava de na msm aba puder mudar o gráfico

Então, no caso acho que teria que usar mais gráficos (onde a posição 3, fica na 2.) Já que ao mudar gráficos, a sprite que representa ele "parado" é selecionada.
Writing codes. Writing novels. Writing... Fates.


Quando você muda um gráfico do personagem, a sprite padrão dele, é a que representa ele parado.
Ou seja, repare no maker, quando você desativa a animação, e gira o personagem por exemplo, ele aparece com o quadro que o representa parado. (Com os dois pés no chão.) Então, como você não pode criar uma página específica para cada quadro, uma solução seria usar a funçao de mudar gráficos, (desativar animação dele parado e em movimento), e inserir gráficos onde a posição que deveria representar ele parado, representa um passo dele...
Writing codes. Writing novels. Writing... Fates.

Poderia dar um exemplo no maker, n estou a conseguir s:

Fiz um script aqui pra fixar a direção e o frame de qualquer char:
#==============================================================================
# ** Game_Character
#==============================================================================
class Game_Character < Game_CharacterBase
  
  attr_reader :frame_fix # Frame fixado
  
  #--------------------------------------------------------------------------
  # * Definição do frame do character por índice
  #     index : Índice do frame
  #--------------------------------------------------------------------------
  def _setframe_index(index)
    @pattern = index % 3
    @direction = [2,4,6,8][(index/3.0).floor]
  end
  #--------------------------------------------------------------------------
  # * Definição do frame do character por direção e pattern
  #     direction : Direção do char
  #     pattern   : Pattern (frame da animação) do char
  #--------------------------------------------------------------------------
  def _setframe_dirpattern(direction, pattern)
    @pattern = pattern
    @direction = direction
  end
  private :_setframe_index
  private :_setframe_dirpattern
  #--------------------------------------------------------------------------
  # * Definição do frame do character
  #--------------------------------------------------------------------------
  def set_frame(*args)
    if args.size == 1
      _setframe_index(*args)
    else
      _setframe_dirpattern(*args)
    end
  end
  #--------------------------------------------------------------------------
  # * Fixação/Desfixação da direção do char
  #     flag : Se true, fixa a direção, se false, desfixa ela
  #--------------------------------------------------------------------------
  def fix_direction(flag=true)
    process_move_command(RPG::MoveCommand.new(flag ? ROUTE_DIR_FIX_ON : ROUTE_DIR_FIX_OFF))
  end
  #--------------------------------------------------------------------------
  # * Fixação/Desfixação do frame do char
  #     flag : Se true, fixa o frame, se false, desfixa ela
  #--------------------------------------------------------------------------
  def fix_frame(flag=true)
    @frame_fix = flag
  end
  #--------------------------------------------------------------------------
  # * Atualização do padrão da animação
  #--------------------------------------------------------------------------
  alias mbsupdateanimation update_animation
  def update_animation(*args)
    return if @frame_fix
    mbsupdateanimation(*args)
  end
end


Basicamente é só chamar o fix_direction, depois o fix_pattern e aí o set_frame, e pra retornar as direções e pattern ao normal só fix_direction(false) e fix_pattern(false).

Por exemplo:
$game_player.fix_pattern
$game_player.fix_direction
$game_player.set_frame(2)
wait(120)
$game_player.fix_direction(false)
$game_player.fix_pattern(false)


Fora o jogador, você pode usar qualquer instância de Game_Character, tipo eventos:
event = $game_map.events[@event_id]
event.fix_pattern
event.fix_direction
event.set_frame(2)
wait(120)
event.fix_direction(false)
event.fix_pattern(false)


Aliás, o índice começa do 0, então o 3 seria 2, nesse caso.
~ Masked

Dá um erro undefenid variavel local or method, sabe como resolver?

Opa, fiz umas alterações depois de um teste e esqueci de atualizar a mensagem, use esse:
#==============================================================================
# ** Game_Character
#==============================================================================
class Game_Character < Game_CharacterBase
  
  attr_reader :pattern_fix # Frame fixado
  
  #--------------------------------------------------------------------------
  # * Definição do frame do character por índice
  #     index : Índice do frame
  #--------------------------------------------------------------------------
  def _setframe_index(index)
    @pattern = index % 3
    @pattern = 0 if @pattern < 0
    @direction = [2,4,6,8][(index/3.0).floor]
  end
  #--------------------------------------------------------------------------
  # * Definição do frame do character por direção e pattern
  #     direction : Direção do char
  #     pattern   : Pattern (frame da animação) do char
  #--------------------------------------------------------------------------
  def _setframe_dirpattern(direction, pattern)
    @pattern = pattern
    @direction = direction
  end
  private :_setframe_index
  private :_setframe_dirpattern
  #--------------------------------------------------------------------------
  # * Definição do frame do character
  #--------------------------------------------------------------------------
  def set_frame(*args)
    if args.size == 1
      _setframe_index(*args)
    else
      _setframe_dirpattern(*args)
    end
  end
  #--------------------------------------------------------------------------
  # * Fixação/Desfixação da direção do char
  #     flag : Se true, fixa a direção, se false, desfixa ela
  #--------------------------------------------------------------------------
  def fix_direction(flag=true)
    process_move_command(RPG::MoveCommand.new(flag ? ROUTE_DIR_FIX_ON : ROUTE_DIR_FIX_OFF))
  end
  #--------------------------------------------------------------------------
  # * Fixação/Desfixação do pattern do char
  #     flag : Se true, fixa o pattern, se false, desfixa ela
  #--------------------------------------------------------------------------
  def fix_pattern(flag=true)
    @pattern_fix = flag
  end
  #--------------------------------------------------------------------------
  # * Atualização do padrão da animação
  #--------------------------------------------------------------------------
  alias mbsupdateanimation update_animation
  def update_animation(*args)
    return if @frame_fix
    mbsupdateanimation(*args)
  end
end
~ Masked

Agora funcionou só q fico definindo entre a primeira e a terceira, não dá para somente definir a 3?