Battle Maker

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Suporte para criação de Jogos


    GM RPG - 3º Lição - Janelas Flutuantes estilo Ragnarok - 2º parte

    jiraya
    jiraya
    Administrador
    Administrador


    Mensagens : 1299
    Credibilidade : 54

    GM RPG - 3º Lição - Janelas Flutuantes estilo Ragnarok - 2º parte Empty GM RPG - 3º Lição - Janelas Flutuantes estilo Ragnarok - 2º parte

    Mensagem por jiraya Sáb Jan 08, 2011 1:07 pm

    [Autor: João Neto ]
    Como dito na aula anterior, estarei explicando como funcionam os scripts usados e agora usaremos imagens ao invés de desenhar a janela com código, para dar um ar mais profissional a mesma.
    Vamos por Script:
    mouseover
    Código:

    x1 = argument0 //posição x inicial
    x2 = argument1 //posição x final
    x3 = argument2 //posição y inicial
    x4 = argument3 //posição y final
    if mouse_x >= x1 && mouse_x <= x2 && mouse_y >= x3 && mouse_y <= x4{return true;}
    else{return false;}
    Observe que fazemos a verificação se a posição X e Y do mouse se encontra dentro dos valores passados. Como são quatro valores, se forma um retangulo de validação.
    janela
    Código:

    x1 = argument0;
    x2 = argument1;
    x3 = argument2;
    x4 = argument3;
    cor = argument4;
    aberta = argument5;
    txtAberta = argument6;
    txtFechada = argument7;
    tela(x1,x2,x3,17,cor);
    if aberta {
        textoJanela(x1,x2,txtAberta);
        tela(x1,x2+16,x3,x4+16,cor);
    }
    else {
        textoJanela(x1,x2,txtFechada);
        tela(x1,x2+16,x3,17,cor);

    Este é bem simples. Ele faz chamada no Script Tela, passando os parametros que ele recebeu. Observe a validação no aberta, que indica que devemos desenhar uma janela menor quando fechada, e o texto que será mostrado nos dois casos.
    tela
    Código:

    x1 = argument0
    x2 = argument1
    x3 = argument2
    x4 = argument3
    cor = argument4
    if cor == 0 then cor = c_white;
    //Desenha o fundo
    draw_set_color(make_color_rgb(74,74,132))
    draw_set_alpha(0.7)
    draw_rectangle(x1,x2,x1 + x3,x2 + x4,false)
    draw_set_color(cor)
    draw_set_alpha(1)
    //desenha as bordas
    draw_rectangle(x1,x2,x1 + x3,x2 + x4,true)
    draw_rectangle(x1 + 1,x2 + 1,x1 + (x3 - 1),x2 + (x4 - 1),true)
    return true;
    Este é o script que desenha a janela, azul com borda branca. Observe que é apenas uma combinação de Funções de Draw, cores, parametros e alpha.
    LPress
    Código:

    if move == false{
        move = true;
        d_x = x - mouse_x;
        d_y = y - mouse_y;
    }
    timer += 1
    alarm[0] = 20
    if timer > 1{
        if opened == true{
            opened = false;
            timer = 0;
            break;
        }
        else{
            opened = true;
            timer = 0;
            break;
        }
    }
    Este é o script responsável por duas coisas importantes:

    • O Duplo Clique
    • Saber se a janela está se movendo e gravar os valores X e Y da posição do mouse.

    textoJanela
    Código:

    draw_set_color(c_white);
    draw_set_font(menubarra);
    draw_text(argument0+5,argument1+1,argument2);
    Este simplesmente desenha o texto, como falado no script tela, ele possui já algumas definições prontas apenas para evitar se reescrever toda vez que se for escrever um texto na tela.
    janelaDraw
    Código:

    if mouseover(x,x+largura,y,y+15){
        if mouse_check_button_pressed(mb_left){
            LPress();}
    }
    if mouse_check_button_released(mb_left){
            move = false;}
    if move = true{
        valor_x = abs(view_xview - (mouse_x + d_x));
        valor_y = abs(view_yview - (mouse_y + d_y));
    }
    x = view_xview + valor_x;
    y = view_yview + valor_y;
    janela(x,y,largura,altura,cor,opened,argument0,argument1);
    Este é o Script que faz a mágica. Ele valida se o mouse está sobre a borda superior usando o script mouseover, valida se o botão esquerdo do mouse está pressionado. Se sim, ele invoca o Script LPress, que é responsável por mudar a posição da janela e do duplo Clique. Aqui um detalhe importante: a função deve ser a mouse_check_button_pressed, ou o duplo Clique não funcionará. Caso o botão seja solto, no evento mouse_check_button_released, cancelamos o movimento da janela.
    Na próxima validação, se a variável move está true significa que há movimento, e fazemos os cálculos como acima. Um detalhe aqui no qual eu já recebi críticas foi a redundância de se remover os valores X e Y da view durante o movimento e depois acrescentá-los novamente ao se desenhar a janela.
    O motivo disso é muito simples. Ao se mudar a posição da view, durante o movimento do herói ou outro objeto ao qual ela esteja associada, O MENU DEVE DAR A IMPRESSÃO DE PARADO, OU SEJA, SUA POSIÇÃO X E Y IRÁ MUDAR DE ACORDO COM A X E Y DA VIEW.
    E por final, chamamos o script janela, passando todos os parametros necessários que foram colhidos no nosso objeto.
    Eu sei, parece bem complexo. Mas estude o código, você verá que é bem simples.
    Agora vem a má notícia pra quem adorou esta aula: Para se usar as Imagens das Skins do ragnarok, nós só usaremos dois( 2 ) dos seis( 6 ) scripts acima. Porque? por um motivo bem simples: Como as imagens da Skin do ragnarok vem pré-montada, só criaremos dois sprites, um do menu fechado e outro aberto, e faremos a mudança entre eles. A desvantagem desse tipo de Menu é que para cada menu criado, você terá que ter 2 Sprites da janela.
    Para o teste eu estarei usando esta Skin:
    GM RPG - 3º Lição - Janelas Flutuantes estilo Ragnarok - 2º parte Basewinbg
    GM RPG - 3º Lição - Janelas Flutuantes estilo Ragnarok - 2º parte Basewinmini
    Vai ser bem simples. Antes de mais nada crie dois Sprites, adicione os sprites ae de cima e os chame de status_aberta e status_fechada. Agora crie um objeto e chame-o de objJanelaRag.
    Adicione nele 3 eventos, um Create, um Alarm0 e um Draw.
    Agora siga os scripts abaixo para cada um:
    Create
    Código:
    opened = false;
    timer = 0;
    move = false
    d_x = 0;
    d_y = 0;
    valor_x = 0;
    valor_y = 0;
    Alarm0
    Código:
    timer = 0;
    Draw
    Código:
    if mouseover(x,x+280,y,y+15){
        if mouse_check_button_pressed(mb_left){
            LPress();}
    }
    if mouse_check_button_released(mb_left){
            move = false;}
    if move = true{
        valor_x = abs(view_xview - (mouse_x + d_x));
        valor_y = abs(view_yview - (mouse_y + d_y));
    }
    x = view_xview + valor_x;
    y = view_yview + valor_y;
    if opened {
        draw_sprite(status_aberta,0,x,y);
    }
    else {
        draw_sprite(status_fechada,0,x,y);
    }
    Uma pequena observação: no mouseover há dois valores fixos, 280 e 15. Estes valores são respectivamente a largura e a altura que responderá ao mouseover, devendo ser mudadas se a janela for mais larga ou estreita e se a barra for mais fina ou espessa.
    Coloque o objeto na room e rode.
    Bem mas simples com certeza. A vantagem do uso de imagens padronizadas como as Skins do Ragnarok, é que podemos criar um sistema de Skins para o nosso game, bastando criar um script que valida um determinado valor de diretório e Lê as respectivas imagens no mesmo.
    Para desenhar valores dentro da mesma agora, está bem fácil, mas lembre de mudar a cor da fonte e o tamanho.
    Por hoje é só. Na próxima lição, e com certeza por enquanto a ultima de GM RPG, falaremos sobre atributos do herói.
    Até lá.

      Data/hora atual: Qui maio 02, 2024 4:51 am