Forums » RGSS

Lição 7 de RGSS - Sintaxe-> Estruturas de Repetição

    • 683 posts
    4 de junho de 2015 13h20min53s 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, as Estruturas 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:

    for i in0...$game_party.actors.size x =64 y = i *116 actor = $game_party.actors[i] draw_actor_graphic(actor, x -40, y +80)end

    ou assim:

    loop doGraphics.update Input.update update if $scene !=selfbreakendend

    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:forvarin...<valorfinal>end

    Ex:
    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:

    forinend

    Ex:

    for i in@map.events.keys @events[i]=Game_Event.new(@map_id,@map.events[i])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 ("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:

    while $scene !=nil $scene.main end

     

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


    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:

    loop doGraphics.update Input.update update if $scene !=selfbreakendend

    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 !!