Makers Brasil
Bem Vindos a Maker´s Brasil (um forum para criação de servidores 2D e 3D)Nos desejamos boa sorte no seu projeto!

[GB]CRIANDO UM DIALOGO

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

[GB]CRIANDO UM DIALOGO

Mensagem por spectrus em Qua Maio 11, 2011 11:08 am

Neste tutorial aprenderemos como exibir mensagens de dialogo usando o 3D Game Builder.


Primeiramente crie um novo projeto
utilizando MD2 como formato do ator principal ou use um anterior, em
seguida crie um pequeno cenário com uma base sólida para que o ator
principal possa andar sobre ela, e em uma das extremidades dessa base
sólida adicione um Ator MD2, utilize o padrão que já vem juntamente com o
3D Game Builder, ou crie um novo ator acessando o menu “Banco de Dados
-> Atores MD2”. Para adicionar o ator a cena selecione a categoria de
objetos “Atores MD2” e de um duplo clique no ator desejado no nosso
caso o ator “Default”. Em seguida abaixo do ator MD2 adicionado
posicione um cubo do tipo “Event Area”, a categoria de objetos do tipo
“Event Area” possui objetos que não são visíveis durante a execução do
jogo, são visíveis apenas durante a criação dos cenários, e são
utilizados para a criação de alguns eventos. Após concluir o cenário
deverá estar parecido com este:






Agora vamos criar um evento do tipo
“OnCollision” para cubo do tipo “Event Area” que foi posicionado abaixo
do ator MD2, selecione-o e acesse a aba eventos, clique em
“OnCollision”, será exibido a editor de scripts. O script que criaremos
vai exibir uma conversa entre os atores no momento em que o ator
principal tocar no cubo do tipo “Event Area” e a tecla “Enter” será a
tecla avançara o dialogo.



Mas antes de começarmos o nosso
script vamos cadastrar duas texturas, estas texturas serão as faces dos
dois atores e serão exibidas na caixa de dialogo. No meu caso utilizarei
as seguintes imagens:

FaceAtor

FaceMainActor


Acesse o meu “Banco de Dados ->
Materiais” e crie os dois materiais com estas imagens e com os nome de
“FaceAtor” e “FaceMainActor”.




Agora vamos ao script que exibirá o
dialogo entre os atores, lembre-se de alterar o nome dos objetos
conforme o seu cenário, o “Objeto3” é o cubo do tipo “EventArea” do
cenário, caso o seu cubo possua outro nome altere-o no script ou no seu
objeto.


Código:


                [b]var[/b] Dialogo:Integer;
                  Dialogo:=ReadGlobalVarDef('Dialog', 0);
                    [b]if[/b] Dialogo = 0 [b]then[/b]
                    [b]begin[/b]
                    ShowGameDialog('FaceMainActor',
                                    'Olá',
                                    150,
                                    GetScreenWidth()-100,
                                    50,
                                    GetScreenHeight()-180,
                                    110,
                                    110,
                                    115,
                                    (GetScreenHeight()-180)+87,
                                    175,
                                    (GetScreenHeight()-180)+35,
                                    (GetScreenWidth()-230),
                                    true);
                     WriteGlobalVar('Dialog', Dialogo+1);
                     SetWaitKeyUp(13);
                     SetKeyUpOK(true);
                     DisableMainActorControl();
                     SetObjectAnimation('MainActor', 'stand');
                     SetObjectPosition('Objeto3',
                     GetObjectPositionX('Player'),             
                     GetObjectPositionY('Objeto3'),
                     GetObjectPositionZ('Player'));
  [b]end;          [/b]
                
                 [b]if[/b] (IsKeyPress(13))[b]and[/b]((GetWaitKeyIsUp)) [b]then[/b]
                    [b]begin[/b]
                 [b]  if[/b] Dialogo = 1 [b]then[/b]
                   [b]  begin[/b]
                         ShowGameDialog('FaceActor',
                                       'Olá!',
                                       150,
                                       GetScreenWidth()-100,
                                       50,
                                       GetScreenHeight()-180,
                                       110,
                                       110,
                                       115,
                                       (GetScreenHeight()-180)+87,
                                       175,
                                       (GetScreenHeight()-180)+35, 
                                       (GetScreenWidth()-230),
                                       true);
                         WriteGlobalVar('Dialog', Dialogo+1);
                   [b]  end[/b]
                   [b]  else  if[/b] Dialogo = 2 [b]then[/b]
                   [b]  begin[/b]
                         ShowGameDialog('FaceMainActor',
                                       'Porque você tem essa cabeça de abóbora???',
                                       150,
                                       GetScreenWidth()-100,
                                       50,
                                       GetScreenHeight()-180,
                                       110,
                                       110,
                                       115,
                                       (GetScreenHeight()-180)+87,
                                       175,
                                       (GetScreenHeight()-180)+35,
                                       (GetScreenWidth()-230),
                                       true);
                         WriteGlobalVar('Dialog', Dialogo+1);
                   [b]  end[/b]
  [b]  else if[/b] Dialogo = 3 [b]then[/b]
                   [b]  begin[/b]
                         ShowGameDialog('FaceActor',
                                       'Não sei...',
                                       150,
                                       GetScreenWidth()-100,
                                       50,
                                       GetScreenHeight()-180,
                                       110,
                                       110,
                                       115,
                                       (GetScreenHeight()-180)+87,
                                       175,
                                       (GetScreenHeight()-180)+35,
                                       (GetScreenWidth()-230),
                                       true);
                         WriteGlobalVar('Dialog', Dialogo+1);
  [b]  end  [/b]
  [b]  else[/b]
  [b]  begin[/b]
                         HideGameDialog();
                         EnableMainActorControl();
                         WriteGlobalVar('Dialog', Dialogo+1);
                         SetObjectScript('Objeto3', 'OnCollision',  '');
                   [b]  end;[/b]
                     SetWaitKeyUp(13);
  [b]end;[/b]
Eu imagino que você não tenha entendido muita coisa do que está
acontecendo no script, então vou explicar linha por linha. Um conceito
importante de lembrar sobre os scripts no 3D Game Builder é sobre a
maneira como eles são executados, por exemplo um evento do tipo
“OnCollision” será executado no momento em que o ator principal tocar no
objeto que possuir o evento, e após o termino do script, caso o ator
continue colidindo com o objeto o script será executado novamente, até o
momento que ator deixe de colidir com o objeto. Por isso para exibirmos
um dialogo entre personagens não basta usar o comando “ShowGameDialog”,
é necessário fazer o controle de etapas do dialogo, como foi feito no
script acima.
Código:
[b]  var[/b] Dialogo:Integer;
Declara uma variável do tipo Integer que servira como controle para as etapas do dialogo)

Dialogo:=ReadGlobalVarDef('Dialog', 0);
(Utiliza o comando “ReadGlobalVarDef” para ler o valor da variável
global “Dialog”, caso ela não exista o valor retornado é 0)
Código:
[b]  if[/b] Dialogo = 0 [b]then[/b]
(Caso o valor de “Dialogo” seja 0, significa que é a primeira vez que o script está sendo executado)
Código:
  ShowGameDialog('FaceMainActor',
                    'Olá',
                    150,
                    GetScreenWidth()-100,
                    50,
                    GetScreenHeight()-180,
                    110,
                    110,
                    115,
                    (GetScreenHeight()-180)+87,
                    175,
                    (GetScreenHeight()-180)+35,
                    (GetScreenWidth()-230),
                    true);
(O comando está divido em diversas linhas para ficar visível aqui,
na realidade ele pode estar em apenas uma linha. O comando exibe a
primeira caixa de dialogo com a frase “Olá” e utilizando o material
“FaceMainActor” como imagem de quem está falando. Os outros parâmetros
são referentes ao tamanho, a posição da caixa de dialogo, a posição da
textura e do texto, os valores utilizados são para deixar a caixa de
diálogo sempre centralizada na parte inferior da tela. E o ultimo
parâmetro define se o texto será formatado para caber na caixa de
dialogo automaticamente)

WriteGlobalVar('Dialog', Dialogo+1);
(Utiliza o comando “WriteGlobalVar” para alterar o valor da variável
global “Dialog”, incrementando-a em 1, insta significa que o nosso
dialogo avançou uma etapa)

SetWaitKeyUp(13);
(Define ao sistema que deve aguardar a tecla 13 (Enter) não estar
pressionada para tornar a flag “WaitKeyUp” verdadeira. Isto é utilizado
para evitar que o usuário simplesmente segure a tecla “Enter” para
avançar o dialogo, utilizando a flag “WaitKeyUp” é necessário que a
tecla “Enter” seja liberada antes do dialogo avançar)

SetKeyUpOK(true);
(Altera manualmente o valor da flag “WaitKeyUp” para true, isto
evita que seja necessário pressionar “Enter” duas vezes na primeira
caixa de dialogo)

DisableMainActorControl();
(Desativa o controle do ator principal pelo usuário, isto impede que
jogador ande com o personagem enquanto o dialogo esta sendo exibido)

SetObjectAnimation('MainActor', 'stand');
(Altera a animação atual do ator)

Código:
  SetObjectPosition('Objeto3',
                      GetObjectPositionX('Player'),             
                      GetObjectPositionY('Objeto3'),
                      GetObjectPositionZ('Player'));
(Altera a posição do “Objeto3”, o nosso cubo do tipo “Event Area”
que acabamos de colidir para que ele fique exatamente embaixo do ator
principal, para evitar que o ator saia do evento antes do dialogo
acabar)

if (IsKeyPress(13))and((GetWaitKeyIsUp)) then
(Verifica se a tecla 13 (Enter) esta pressionada e se a flag
“WaitKeyUp” esta verdadeira, caso as duas premissas sejam verdadeiras
será exibido o próximo dialogo)

if Dialogo = 1 then
(Caso o próximo dialogo seja o de valor 1)
Código:
  ShowGameDialog('FaceActor',
                    'Olá!',
                    150,
                    GetScreenWidth()-100,
                    50,
                  GetScreenHeight()-180,
                    110,
                    110,
                    115,
                    (GetScreenHeight()-180)+87,
                    175,
                    (GetScreenHeight()-180)+35, 
                    (GetScreenWidth()-230),
                    true);
(Exibe o dialogo com a frase “Olá!” a textura de face “FaceAtor”, os outros parâmetros já foram explicados anteriormente)

WriteGlobalVar('Dialog', Dialogo+1);
(Utiliza o comando “WriteGlobalVar” para alterar o valor da variável
global “Dialog”, incrementando-a em 1, insta significa que o nosso
dialogo avançou uma etapa)

else if Dialogo = 2 then
(Caso o próximo dialogo não tenha sido o de valor 1 e seja o de valor 2)
Código:
  ShowGameDialog('FaceMainActor',
                    'Porque você tem essa cabeça de abóbora???',
                    150,
                    GetScreenWidth()-100,
                    50,
                    GetScreenHeight()-180,
                    110,
                    110,
                    115,
                    (GetScreenHeight()-180)+87,
                    175,
                    (GetScreenHeight()-180)+35,
                    (GetScreenWidth()-230),
                    true);
(Exibe o dialogo com a frase “Porque você tem essa cabeça de
abóbora???” a textura de face “FaceMainAtor”, os outros parâmetros já
foram explicados anteriormente)

WriteGlobalVar('Dialog', Dialogo+1);
(Utiliza o comando “WriteGlobalVar” para alterar o valor da variável
global “Dialog”, incrementando-a em 1, insta significa que o nosso
dialogo avançou uma etapa)

else if Dialogo = 3 then
(Caso o próximo dialogo não tenha sido o de valor 1 e nem o de 2 e seja o de valor 3)
Código:
  ShowGameDialog('FaceActor',
                    'Não sei...',
                    150,
                    GetScreenWidth()-100,
                    50,
                    GetScreenHeight()-180,
                    110,
                    110,
                    115,
                    (GetScreenHeight()-180)+87,
                    175,
                    (GetScreenHeight()-180)+35,
                    (GetScreenWidth()-230),
                    true);
(Exibe o dialogo com a frase “Não sei...” a textura de face
“FaceAtor”, os outros parâmetros já foram explicados anteriormente)

WriteGlobalVar('Dialog', Dialogo+1);
(Utiliza o comando “WriteGlobalVar” para alterar o valor da variável
global “Dialog”, incrementando-a em 1, insta significa que o nosso
dialogo avançou uma etapa)

Else
(Caso o próximo dialogo não tenha sido o de valor 1 e nem o de 2 e nem o de 3 significa que o dialogo acabou.)

HideGameDialog();
(Esconde a caixa de dialogo)

EnableMainActorControl();
(Habilita novamente o controle do ator principal para o jogador)

WriteGlobalVar('Dialog', Dialogo+1);
(Incrementa pela ultima vez valor da variável global “Dialog”)

SetObjectScript('Objeto3', 'OnCollision', '');
(Remove o script “OnCollision” do objeto “Objeto3”)

SetWaitKeyUp(13);
(Sempre que a tecla 13 (Enter) for pressionada o comando
“SetWaitKeyUp” é utilizado para aguardar que ela seja liberada
novamente)
Finalmente colocando o script acima no 3D Game Builder no
evento “OnCollision” do “Objeto3” (cubo do tipo “Event Area”) ,
salvando-o e executando o projeto você terá o seguinte resultado:



É possível alterar o visual da caixa de dialogo
alterando o GUI Layout utilizando no projeto, para isso acesse o menu
“Projeto -> GUI Layout”. Este foi mais um exemplo do que pode ser
feito utilizando a linguagem script, nos próximos tutoriais aprenderemos
a fazer outras coisas utilizando scripts.


Divulgue nosso Forum!
[Você precisa estar registrado e conectado para ver este link.]
Código:
[url=http://makersbrasil.forumeiros.com/]
src="http://img841.imageshack.us/img841/9522/92324935.png"
border="0">[/url]



E meu fan? entao use:

Código:
[img]http://www.baixa.la/arquivos/3908525_imagem.gif[/img]

Sign:
Spoiler:




spectrus
Administrador
Administrador

Mensagens : 299
Estrelas Makers : 1466
Creditos : 49
Data de inscrição : 01/01/2011
Idade : 23
Localização : V.da conquista bahia

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