[RESOLVIDO]pergunta(fala)

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

Resolvido [RESOLVIDO]pergunta(fala)

Mensagem por Convidad em Qua 22 Set 2010, 11:46

queria saber como se fas uma barrinha onde aparece coisas escritas,na verdade quero um sistema de fala so em codigo tipo rpgs.

Convidad
Convidado


Voltar ao Topo Ir em baixo

Resolvido Re: [RESOLVIDO]pergunta(fala)

Mensagem por itarodrigo em Qua 22 Set 2010, 13:17

na verdade, nao entendi sua duvida, pode dar um exemplo?

itarodrigo

Número de Mensagens : 599
Idade : 33
Data de inscrição : 28/08/2010
Reputação : 52
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Resolvido Re: [RESOLVIDO]pergunta(fala)

Mensagem por Sonic em Qua 22 Set 2010, 13:21

wtf? cara tenta explica oque vc quer num deu pra entende nada não

Sonic

Ranking : Nota D
Número de Mensagens : 384
Data de inscrição : 12/01/2010
Notas recebidas : D
Reputação : -4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Resolvido Re: [RESOLVIDO]pergunta(fala)

Mensagem por Assassino em Qua 22 Set 2010, 14:10

acho que as aulas de Joãoneto irá ajudar:

PARTE 1

joaoneto escreveu:Lá venho eu com mais uma lição de GM RPG. Sei que muitos tem lido, mas não sei estou agradando, afinal todos sabemos que fazer um jogo em GM é complexo, demorado, e na maioria das vezes apanhamos pra cacete pra fazer algo parecido com o que queremos.
Eu peço aos leitores que testem, tentem, achem erros, jeitos mais fáceis de fazer. Estou na ponta do Iceberg sobre o assunto, ainda há muito o que escrever e falar e, seria fácil postar aqui uma "engine" de jogo RPG, mas dessa forma se acaba copiando muito e aprendendo nada. Chega de enrolação e vamos começar.

Uma das coisas que você deve saber e, se ainda não sabe, é que o evento Draw com certeza é e sempre será o evento mais usado quando falamos de mostrar informações na tela.
Hoje, você aprenderá a fazer uma janela, onde poderá mostrar o que quiser, criar várias delas com informações diferentes, etc. A vantagem é que, usando scripts, basta mudar alguns parãmetros e temos janelas completamente distintas em conteúdo, mas no mesmo padrão de desenho, como devem ser.
Para que você se familiarize com o evento Draw, não iremos usar imagens para desenhar nossa janela, usaremos apenas GML, e o resultado final será esse:

Com o código que você aprenderá aqui, você fará uma janela que, além de flutuante, podendo ser movida com o arrastar/soltar do mouse, ela será retrátil(palavra difícil), ou seja, ao se dar um duplo clque ela se abre e se fecha. Mãos à obra.

Antes de mais nada precisamos de 2 resources do GM: um sprite e uma Fonte. Nosso sprite será a máscara que o objeto janela usará para ser arrastado, e a fonte para ser desenhada na janela. A sprite deve seguir as configurações da figura abaixo:

e a fonte assim:

Agora, criaremos uma pancada de scripts, que serão explicados passo a passo depois. Crie os scripts abaixo usando o nome em negrito.
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;}
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);

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;
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;
    }
}
textoJanela
Código:

draw_set_color(c_white);
draw_set_font(menubarra);
draw_text(argument0+5,argument1+1,argument2);
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);
Se você observar, praticamente o que é necessário para se fazer a janela já foi escrito nos scripts. Agora só organizar algumas variáveis e fazer algumas chamadas em um evento draw e pronto. E ainda tem gente que reclama... Rolling Eyes

Agora a parte mais difícil. Crie um objeto, chame-o de objJanela. Adicione 3 eventos, um Create, um Alarm0 e um Draw. Abaixo segue o código de cada um:

Create
Código:

opened = false;
timer = 0;
cor = c_white;
move = false
d_x = 0;
d_y = 0;
valor_x = 0;
valor_y = 0;
largura = 220;
altura = 180;
image_xscale = 6;
Alarm0
Código:
timer = 0;
Draw
Código:

janelaDraw("Menu","HP - 100");
Para evitarmos um erro, adicione no Sprite do objeto nosso sprite de nome mask.
Crie uma room, adicione o objJanela na mesma e rode. Ao clicar na barra superior e arrastar, a janela se move. Ao clicar duas vezes, a janela se expande, mudando o texto na barra. Para que se apareça um texto na parte de baixo da janela, inclua este código no Draw do objJanela:
Código:
if opened {
    textoJanela(x,y+20,"HP - 100");
}
Agora ao se clicar duas vezes, o texto da barra é mostrado na parte inferior.
Caso queria ver a coisa realmente legal, crie uma room grande, adicione uma view e um objeto que se move e... a janela acompanha a tela !!

Já deu pra sacar que parece difícil demais, mas foi muito fácil. O tópico já está de um tamanho bom e eu muito cansado.
Na próxima parte desta lição eu explicarei item por item dos scripts, e mudaremos o layout de nossa janela para usar imagens, dando mais vida à mesma.

PARTE 2

joaoneto escreveu: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á.

Qualquer dúvida sobre a 1° Parte poste sua dúvida lá e qualquer dúvida sobre a 2° Parte faça a mesma coisa. sorrindo2

Assassino

Número de Mensagens : 390
Idade : 20
Data de inscrição : 13/08/2010
Reputação : 6
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://rockstarfamilies.blogspot.com/

Voltar ao Topo Ir em baixo

Resolvido Re: [RESOLVIDO]pergunta(fala)

Mensagem por Convidad em Qua 22 Set 2010, 20:19

OPA VLW CARA Very Happy

Convidad
Convidado


Voltar ao Topo Ir em baixo

Resolvido Re: [RESOLVIDO]pergunta(fala)

Mensagem por Conteúdo patrocinado Hoje à(s) 14:30


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