Forums » RGSS

Lição 7 - Estruturas de repetição

  • Fl\u00e1vio Henrique
    • 683 posts
    2 de junho de 2015 18:06:59 ART

    Eu tenho recebido vários pedidos sobre como fazer animações de introdução, e principalmente como alterar janelas ou scripts de menu. Eu posso até fazer isso, e mandar, mas se você tem interesse em saber como funciona, tenha paciência, eu não posso postar uma aula por dia, e mesmo se pudesse, já recebi inúmeras PMs de pessoas que lêem a 3º aula, e me perguntam o que são Vars... (Obviamente ele não leu a 1º aula, por achar que era desnecessário.)

    Mais uma vez eu digo. Tenha paciência. Tudo que você precisa saber sobre RGSS para seu próprios games você aprenderá aqui.

    Hoje eu falarei de algo muito importante na programação, que faz com que as coisas "Funcionem" nos games, asEstruturas de repetição.
    Este nome é usado exatamente porque é o que elas fazem, repetem e repetem e repetem, até que seja necessário parar. Você com certeza já se deparou com um código assim:

    Código:
    for i in 0...$game_party.actors.size
    x = 64
    y = i * 116
    actor = $game_party.actors
    draw_actor_graphic(actor, x - 40, y + 80)
    end

    ou assim:

    Código:
    loop do
    Graphics.update
    Input.update
    update
    if $scene != self
    break
    end
    end


    Eu pretendo demonstrar apenas as principais estruturas usadas pelo RGSS, pois existem várias.

    Estrutura FOR

    A Estrutura for é o que chamamos de estrutura programada. Nela, sabemos que quando o valor descrito como inicial chegar no valor descrito como final, a repetição termina. Podemos ter dois tipos de for:

    1º - for numérico:
    for var in ...



    end

    Exemplo:

    Código:
    for i in 0...$game_party.actors.size
    x = 64
    y = i * 116
    actor = $game_party.actors
    draw_actor_graphic(actor, x - 40, y + 80)
    end


    2º - for quantitativo:

    for in



    end

    Exemplo:

    Código:
    for i in @map.events.keys
    @events = Game_Event.new(@map_id, @map.events)
    end


    Note que nos dois tipos de for ele possui um valor final, o que faz com que ele seja uma estrutura programada ou, prevista, que significa que sabemos quando ela vai finalizar.

    O primeiro exemplo da estrutura numérica foi retirada da classe Window_MenuStatus, onde calculando a quantidade de heróis presentes na Game_Party, ele desenha o char do herói. Note que a var y é uma operação matemática, que faz com que, a cada vez que i seja diferente, o desenho do char mude de lugar. Como o i também significa o index do herói na var, também é mudado o char que vai ser desenhado.

    O segundo exemplo foi retirado da Classe Game_Map, onde através da quantidade de eventos do mapa, ele instâncía uma nova classe Game_Event, dispensando saber se há um, ou nenhum evento.

    Por enquanto ainda não faremos exercícios, pois nosso grande exercício ainda está por vir...

    Estrutura WHILE

    A Estrutura while ("faça enquanto") é exatamente o que sua tradução sugere. É uma estrutura simples, que pode ou não ser completada com a RW not para inverter a condição, e as RWs and e or, para complementar a condição. Veja os exemplos:

    Código:
    while $scene != nil
    $scene.main
    end

     

    Código:
    while @exp >= @exp_list[@level+1] and @exp_list[@level+1] > 0
    @level += 1
    for j in $data_classes[@class_id].learnings
    if j.level == @level
    learn_skill(j.skill_id)
    end
    end
    end


    No 1º, A estrutura Main se obriga a executar o $scene.main toda vez que a var $scene não for vazia.
    No 2º, Retirado da Classe Game_Actor, Ele condiciona o ganho de skills para os heróis, de acordo com as suas classes e, de acordo com a experiência ganha.

    Estrutura loop - do

    Esta é uma estrutura interessante, porque loop do significa refaça, ou seja, ela é uma estrutura já condicionada a nunca terminar. E ela é assim, só existe uma forma de parar um loop do, que é usando a RW break dentro da estrutura. Observe o código abaixo:

    Código:
    loop do
    Graphics.update
    Input.update
    update
    if $scene != self
    break
    end
    end


    Todos os Scenes do seu game possuem esta estrutura, exatamente por fazer o que é necessário.

    1º - Graphics.update - Atualiza os gráficos.
    2º - Input.update - Atualiza as entradas de teclas
    3º - update - Executa o procedimento update da classe.
    Aqui há um if, que verifica se ainda é o mesmo $scene.
    4º - if $scene != self
    Se a condição for falsa(ainda é o mesmo) ele repete tudo, desde o início, mas se for verdadeira(mudou a Scene) há um break e o encerramento da estrutura.

    Como vamos nos aprofundar mais nisto na próxima aula, você vai ver que, de dentro do procedimento update de uma scene, tudo que faz seu game funcionar parte dali.

    Não há muito o que dizer sobre as estruturas de repetição, a não ser pelo fato de que tudo que foi aprendido até agora(Variáveis,Classes,Condições) foram apenas alicerces de algo bem maior que está por vir e que, tudo se interliga, da mesma forma que podemos ter uma "cascata" de condições, podemos ter uma cascata de fors, e de whiles, onde o while é o mais parecido com o if, pois aceita vários condicionamentos.

    CONCLUSÃO:

    Hoje vimos apenas o básico do básico sobre Estruturas de repetição. Estou me preparando mental e físicamente para entrar no assunto mais importante da programação em RGSS, as Scenes. Eu peço a você que se prepare também, para sorver o máximo que puder a partir daqui, pois você verá que descobriu a "Origem do Game" quando começar a entender esta que é a classe mais importante do RGSS.

    Aos que me pediram como fazer animações, e outras coisas, apenas depois de aprendermos sobre Scenes eu poderei postar algo aqui. Eu já tenho até os exemplos prontos, com uma animação de apresentação bem legal feita. Mas eu não posso passar o carro na frente dos bois então...

    Até a próxima !!  ;D