Entrar
Últimos assuntos
» player não consegue andarpor lovn7 Qui 21 Nov 2024, 13:33
» É possível fazer istó no game maker
por William Lima Qui 21 Nov 2024, 10:56
» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22
» (Resolvido) Cenario longo x Texture Pages
por josuedemoraes Sáb 16 Nov 2024, 15:31
» Kids' band
por Adilson Lucindo Santos Sex 15 Nov 2024, 12:23
» (RESOLVIDO) Engasgos-Troca de Sprites/animações
por josuedemoraes Ter 12 Nov 2024, 01:49
» Block Room - DEMO
por Joton Qua 06 Nov 2024, 22:58
» Game Infinito vertical (subindo)
por macmilam Sáb 26 Out 2024, 12:36
» Retorno da GMBR!!!
por Dancity Ter 22 Out 2024, 16:36
» Máquina de estados
por aminaro Qui 10 Out 2024, 13:33
» como faço pra um objeto colidir com o outro e diminuir a vida do player ?
por josuedemoraes Qui 03 Out 2024, 16:51
» RESOLVIDO: Colisão com objetos moveis
por josuedemoraes Qua 02 Out 2024, 20:28
» Crypt of the Blood Moon
por divin sphere Qua 11 Set 2024, 18:18
» como fazer um objeto seguir?
por divin sphere Dom 18 Ago 2024, 18:08
» Procuro de alguém para Modelar/Texturizar/Animar objetos 3D
por un00brn Dom 11 Ago 2024, 11:10
» Destruição de cenário (estilo DD Tank)
por CoronelZeg Sex 09 Ago 2024, 17:16
» RESOLVIDO-Como destruir uma instancia especifica de um objeto
por josuedemoraes Ter 23 Jul 2024, 00:40
» Automatizar a coleta de id
por GabrielXavier Seg 22 Jul 2024, 18:01
» Preciso de ajuda para concluir um pequeno projeto
por lmoura Qui 27 Jun 2024, 15:45
» ANGULO ACOMPANHAR O OBJETO
por Klinton Rodrigues Qui 27 Jun 2024, 08:34
» Musica reinicia quando sala reinicia
por GabrielXavier Ter 18 Jun 2024, 07:28
» como fazer uma copia de gd
por generico_cube Sex 14 Jun 2024, 15:48
» Square Adventure
por guilherme551 Ter 11 Jun 2024, 09:54
» como posso definir limite de uma variavel
por GabrielXavier Sex 07 Jun 2024, 14:14
» [Resolvido] Dúvida, colisão única de objeto
por vdm842 Sex 24 maio 2024, 09:50
[RESOLVIDO]pergunta(fala)
3 participantes
Página 1 de 1
[RESOLVIDO]pergunta(fala)
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
Re: [RESOLVIDO]pergunta(fala)
na verdade, nao entendi sua duvida, pode dar um exemplo?
itarodrigo- Data de inscrição : 28/08/2010
Reputação : 52
Número de Mensagens : 599
Prêmios :
x 0 x 4 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [RESOLVIDO]pergunta(fala)
wtf? cara tenta explica oque vc quer num deu pra entende nada
Sonic- Games Ranking :
Notas recebidas : D
Data de inscrição : 12/01/2010
Reputação : -4
Número de Mensagens : 384
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [RESOLVIDO]pergunta(fala)
acho que as aulas de Joãoneto irá ajudar:
PARTE 1
PARTE 2
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.
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.
mouseoverjanela
- 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;}tela
- 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);
}LPress
- 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;textoJanela
- 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;
}
}janelaDraw
- Código:
draw_set_color(c_white);
draw_set_font(menubarra);
draw_text(argument0+5,argument1+1,argument2);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...
- 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);
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:
CreateAlarm0
- 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;Draw
- Código:
timer = 0;
Para evitarmos um erro, adicione no Sprite do objeto nosso sprite de nome mask.
- Código:
janelaDraw("Menu","HP - 100");
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:Agora ao se clicar duas vezes, o texto da barra é mostrado na parte inferior.
- Código:
if opened {
textoJanela(x,y+20,"HP - 100");
}
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:
mouseoverObserve 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.
- 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;}
janelaEste é 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.
- 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);
}
telaEste é 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.
- 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;
LPressEste é o script responsável por duas coisas importantes:
- 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;
}
}
- O Duplo Clique
- Saber se a janela está se movendo e gravar os valores X e Y da posição do mouse.
textoJanelaEste 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.
- Código:
draw_set_color(c_white);
draw_set_font(menubarra);
draw_text(argument0+5,argument1+1,argument2);
janelaDrawEste é 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.
- 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);
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:
CreateAlarm0
- Código:
opened = false;
timer = 0;
move = false
d_x = 0;
d_y = 0;
valor_x = 0;
valor_y = 0;Draw
- Código:
timer = 0;
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.
- 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);
}
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.
Tópicos semelhantes
» fala (pergunta)
» [Resolvido]Pergunta sobre a GMH
» [RESOLVIDO]Pequena pergunta
» [RESOLVIDO]Pergunta - movimentação de inimigos
» [Resolvido][pergunta] machado
» [Resolvido]Pergunta sobre a GMH
» [RESOLVIDO]Pequena pergunta
» [RESOLVIDO]Pergunta - movimentação de inimigos
» [Resolvido][pergunta] machado
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos