[GB]CRIANDO UM DIALOGO
Makers Brasil :: Outros :: Outras Engines :: 3D Game Builder :: Tutoriais
Página 1 de 1
[GB]CRIANDO UM DIALOGO
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:
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.
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.
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)
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)
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)
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)
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)
“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.
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]
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;
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]
- Código:
ShowGameDialog('FaceMainActor',
'Olá',
150,
GetScreenWidth()-100,
50,
GetScreenHeight()-180,
110,
110,
115,
(GetScreenHeight()-180)+87,
175,
(GetScreenHeight()-180)+35,
(GetScreenWidth()-230),
true);
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'));
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);
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);
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);
“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.
spectrus- Administrador
- Mensagens : 299
Estrelas Makers : 1466
Creditos : 49
Data de inscrição : 01/01/2011
Idade : 30
Localização : V.da conquista bahia
Tópicos semelhantes
» [GB]CRIANDO UM PROJETO
» Criando Animações GIF
» [GB]CRIANDO UM SKYBOX
» [GB]CRIANDO UM OBJETO
» [GB]CRIANDO UMA FONTE DE LUZ
» Criando Animações GIF
» [GB]CRIANDO UM SKYBOX
» [GB]CRIANDO UM OBJETO
» [GB]CRIANDO UMA FONTE DE LUZ
Makers Brasil :: Outros :: Outras Engines :: 3D Game Builder :: Tutoriais
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|
Sex Dez 05, 2014 10:00 am por Fabio-3dgames
» Lost In Dreams chapter 01
Seg Nov 24, 2014 7:22 pm por slipknot
» A Makers Brasil ressuscitara em breve!!
Sáb Nov 01, 2014 2:26 pm por Francisco Souza
» Elysium Diamond 3.3.2
Sáb Nov 01, 2014 2:17 pm por Francisco Souza
» personagens e objetos 3d game builder
Seg Jul 28, 2014 2:33 pm por Reginaldo Aparecido Zanus
» fala galera \o obs auhsaush digita galera asygasyga
Dom Jul 06, 2014 1:40 am por anastiel
» tutorial headshot fps creator
Seg Jun 09, 2014 6:08 pm por EspinhosoGamer
» SnakeMod fps creator
Seg Jun 09, 2014 5:55 pm por EspinhosoGamer
» serial fps creator
Seg maio 26, 2014 7:35 pm por slipknot