TUTORIAL 12 - 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.
var Dialogo:Integer;
Dialogo:=ReadGlobalVarDef('Dialog', 0);
if Dialogo = 0 then
begin
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'));
end;
if (IsKeyPress(13))and((GetWaitKeyIsUp)) then
begin
if Dialogo = 1 then
begin
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);
end
else if Dialogo = 2 then
begin
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);
end
else if Dialogo = 3 then
begin
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);
end
else
begin
HideGameDialog();
EnableMainActorControl();
WriteGlobalVar('Dialog', Dialogo+1);
SetObjectScript('Objeto3', 'OnCollision', '');
end;
SetWaitKeyUp(13);
end;
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.
var 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)
if Dialogo = 0 then
(Caso o valor de “Dialogo” seja 0, significa que é a primeira vez que o script está sendo executado)
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)
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)
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)
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)
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.
Créditos: Retirado do Site Oficial: http://www.3dgamebuilder.com.br
superslot เทคนิคการเล่นสล็อตออนไลน์ โปร 100 คือตัวช่วยในการเล่นสล็อตของผู้เล่น northbristol ที่ต้องการเข้าใกล้คำว่า herbalpertpresents โบนัสให้ได้มากที่สุด ทั้งนี้มันคือ xopg.net ตัวช่วยสำคัญที่ทำให้เรา mavoixtavoie ชนะรางวัลได้ง่ายขึ้นมา สมัคร super ต้องบอกว่า เทคนิคการเล่นสล็อตใช้แล้วมันคือตัวช่วยสำหรับผู้ที่ชอบเล่นเกมการพนันเท่านั้น ทดลองเล่นสล็อต ซึ่งเทคนิคต่าง ๆ ไม่ เทคนิคสล็อต เพียง reeffutures2018 เป็นตัวช่วยการทำเงินอย่างเดียวเท่านั้น gclub ยังช่วยสอนให้ slotsuper เรารู้จักและเข้าใจเกมการพนันมากขึ้น
เราคือผู้ให้บริการ superslot เกมสล็อตออนไลน์ northbristol สำหรับบนมือถือ reeffutures2018อันดับ 1 ของประเทศไทย โปร 100 รองรับทั้ง iPhone หรือระบบ IOS และ Android เทคนิคสล็อต เว็บ สล็อต herbalpertpresents ของเรามีเกมส์ให้เลือกเล่นกว่า 200 เกมส์ mavoixtavoie ไม่ว่าจะเป็น xopg.net/ สล็อตยิงปลา เสือมังกร รูเล็ท แข่งม้า ไฮโล เกมคาสิโน Casino และ gclubอีกมากมาย ทดลองเล่นสล็อต เติมเงิน ถอนเงินผ่านระบบอัตโนมัติ. เพื่อนๆ slotsuper สามารถ ดาวน์โหลด ผ่านทาง QR Code ข้างล้างนี้ได้เลย สมัคร super
Thabet is considered as the house that owns the largest and most diverse online game store. There are all forms of sports betting, attractive card games, etc. with high winning rates. Including prizes up to 5 billion VND. Please visit thabet to join
Your essay was enjoyable to read. I really anticipate your upcoming post. Best wishes for the future daily wordle upgrade! This post is extremely engaging and efficient.