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

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

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

Mensagem por joaoneto em Dom 22 Fev 2009, 22:38

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:




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á.

joaoneto

Número de Mensagens : 36
Idade : 39
Data de inscrição : 08/05/2008
Reputação : 7
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://www.deploy.net.br

Voltar ao Topo Ir em baixo

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

Mensagem por Dancity em Dom 22 Fev 2009, 22:50

Poxa mto bom... Tudo tah bem explicadinho... Ainda não tow com tempo de testar mas parece ser ótimo, vai ajudar bastante!
Flw vlw pelo tuto Very Happy

Dancity

Ranking : Nota A
Número de Mensagens : 1339
Data de inscrição : 11/01/2009
Notas recebidas : A
Reputação : 8
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   :
   :

Voltar ao Topo Ir em baixo

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

Mensagem por Lucilon em Seg 23 Fev 2009, 12:03

Enquanto a JRPG tá desativada to vendo seus tutoriais por aqui, e esse ai impressionou mesmo o.O

Tudo bem explicado, vai me ajudar muito!

Ainda descobri a função mouse over, tava precisando dela pra outro script Happy

Vlw!

Lucilon

Número de Mensagens : 1
Data de inscrição : 22/02/2009
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

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

Mensagem por tavares199551 em Qua 03 Mar 2010, 21:22

eu queria saber aonde vai ficar os malse over , janela , tela ,Lpress , textojanela , janela draw se num flo onde iria ficar isso nem nesse e nem no otro topico

tavares199551

Número de Mensagens : 47
Data de inscrição : 07/02/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

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

Mensagem por jp_away em Qua 03 Mar 2010, 21:28

tavares199551 escreveu:eu queria saber aonde vai ficar os malse over , janela , tela ,Lpress , textojanela , janela draw se num flo onde iria ficar isso nem nesse e nem no otro topico

isso são scripts que ele está chamando em outros scripts e no Draw xD

jp_away

Ranking : Nota D
Número de Mensagens : 859
Data de inscrição : 05/09/2009
Notas recebidas : D
Reputação : 6
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

http://www.jpgamesweb.xpg.com.br/

Voltar ao Topo Ir em baixo

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

Mensagem por Conteúdo patrocinado Hoje à(s) 22:49


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum