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

Possível problemas com "elsif"

Iniciado por Nunnu, 06/08/2016 às 14:08

06/08/2016 às 14:08 Última edição: 07/08/2016 às 19:48 por Skyloftian
Olá, sem enrolação, meu problema é o seguinte: Estou tentando fazer um sistema de formação, e nesse momento estou testando formações. Essa formação é pra ser o personagem principal no meio, um dos personagens no lado esquerdo dele, o outro no direito, e o outro atrás, e este funciona se o personagem estiver posicionado pra baixo, mas para os outros lados a formação sai errada. Se possível gostaria que testassem e me dissessem onde eu errei:
class Game_Followers
  alias alias_update update
  def update
    alias_update
    formation if Input.trigger?(:X)
  end

  def formation
    if $game_player.set_direction(2)
      self[0].move_diagonal(4, 2)
      self[1].move_straight(2)
      self[1].move_diagonal(6, 2)
      self[2].move_straight(2)
      self[2].move_straight(2)

    elsif $game_player.set_direction(4)
      self[0].move_diagonal(8, 4)      
      self[1].move_diagonal(4, 2)
      self[1].move_straight(4)      
      self[2].move_straight(4)
      self[2].move_straight(4)

    elsif $game_player.set_direction(6)
      self[0].move_diagonal(8, 6)
      self[1].move_straight(6)
      self[1].move_diagonal(2, 6)
      self[2].move_straight(6)
      self[2].move_straight(6)

    elsif $game_player.set_direction(8)
      self[0].move_diagonal(4, 8)
      self[1].move_straight(8)
      self[1].move_diagonal(6, 8)
      self[2].move_straight(8)
      self[2].move_straight(8)
    end
  end
end


OBS: Para funcionar, alinhe os personagens para baixo, e aperte "A".
Feito por:   King Gerar          ManecBR3
                   
                   (um gato)            (outro gato)

Não consegui entender exatamente o que quer dizer...
Apenas uma direção funciona e as outras não?
Mas bem, pelo que vi o seu código está usando uma função de mudar a direção (set_direction) no if...
Writing codes. Writing novels. Writing... Fates.

06/08/2016 às 23:37 #2 Última edição: 06/08/2016 às 23:39 por Akeshima
Eu acho que o problema é a palavra elsif, eu não sei como funciona direito o script do rpg maker mas ja mexi em outros tipos de script e eu vi a palavra escrita elseif em vez da elsif

06/08/2016 às 23:48 #3 Última edição: 06/08/2016 às 23:51 por Masked
Ao invés de $game_player.set_direction(x), tente usar $game_player.direction == x
O método set_direction não te retorna verdadeiro ou falso como seria esperado quando você chama um método em uma condição, e sim define a direção do jogador e te retorna qualquer coisa, possivelmente nil.

Ficaria assim:
class Game_Followers
  alias alias_update update
  def update
    alias_update
    formation if Input.trigger?(:X)
  end

  def formation
    if $game_player.direction == 2
      self[0].move_diagonal(4, 2)
      self[1].move_straight(2)
      self[1].move_diagonal(6, 2)
      self[2].move_straight(2)
      self[2].move_straight(2)

    elsif $game_player.direction == 4
      self[0].move_diagonal(8, 4)      
      self[1].move_diagonal(4, 2)
      self[1].move_straight(4)      
      self[2].move_straight(4)
      self[2].move_straight(4)

    elsif $game_player.direction == 6
      self[0].move_diagonal(8, 6)
      self[1].move_straight(6)
      self[1].move_diagonal(2, 6)
      self[2].move_straight(6)
      self[2].move_straight(6)

    elsif $game_player.direction == 8
      self[0].move_diagonal(4, 8)
      self[1].move_straight(8)
      self[1].move_diagonal(6, 8)
      self[2].move_straight(8)
      self[2].move_straight(8)
    end
  end
end



Citação de: Akeshima online 06/08/2016 às 23:37
Eu acho que o problema é a palavra elsif, eu não sei como funciona direito o script do rpg maker mas ja mexi em outros tipos de script e eu vi a palavra escrita elseif em vez da elsif

Na verdade em Ruby é elsif mesmo, em algumas linguagens usa-se elseif, else if ou até elif, mas o script não é feito nessas linguagens, então... não :P
~ Masked

07/08/2016 às 00:03 #4 Última edição: 07/08/2016 às 00:05 por Nunnu
Obrigado @Masked, era exatamente isso. Devia ter dado mais atenção para a lógica do "if" e "elsif".

@Conspirancy: Sim, era esse o problema.

E obrigado todo mundo pelas sugestões.
Feito por:   King Gerar          ManecBR3
                   
                   (um gato)            (outro gato)