Conectar-se
Quem está conectado
16 usuários online :: Nenhum usuário registrado, Nenhum Invisível e 16 Visitantes

Nenhum

Ver toda a lista


Compartilhe
Ver o tópico anteriorIr em baixoVer o tópico seguinte
avatar
Data de inscrição : 08/05/2008
Número de Mensagens : 36
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 7

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuáriohttp://www.deploy.net.br

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

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á.
avatar
Ranking : Nota A
Notas recebidas : A
Data de inscrição : 11/01/2009
Número de Mensagens : 1339
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 8

Prêmios
   : 1
   :
   :
Ver perfil do usuário

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

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
avatar
Data de inscrição : 22/02/2009
Número de Mensagens : 1
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0
Ver perfil do usuário

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

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!
avatar
Data de inscrição : 07/02/2010
Número de Mensagens : 47
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0
Ver perfil do usuário

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

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
avatar
Ranking : Nota D
Notas recebidas : D
Data de inscrição : 05/09/2009
Número de Mensagens : 859
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 6

Prêmios
   :
   :
   :
Ver perfil do usuáriohttp://www.jpgamesweb.xpg.com.br/

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

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
Ver o tópico anteriorVoltar ao TopoVer o tópico seguinte
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum