Produção de Game no Director - Parte 2

Por: sunag  

Em: 06/07/2007 14:29

Oi pessoal meu nome é Jean estou publicando um tutorial para criar um design físico para os personagens de jogo, melhor interagindo com o cenário em sua volta. Nesse tutorial vou usar o Havok e Director mais quem usa o 3D Game Studio poderá utilizar a técnica também usando o motor de física "Newton”. Para fazer esse tutorial melhor dizendo eu fiz bastantes testes no motor de jogo do Half Life usado no jogo Conter Strike, e vou usar desse método para aplicar nos futuros jogos porque é muito bom. E muito leve para o programador. Uma coisa que assemelha com os outros jogos são, que quando você estiver em colisão com o piso a gravidade cera 0, então a gravidade so ativa quando você não estiver mais sobre o chão, caindo ou pulando por exemplo. Iniciando o tutorial É altamente recomendável quem não leu ler o tutorial 1 sobre criação de game com Director e Havok http://www.tresd1.com.br/viewtopic.php?t=23040 O tutorial é rápido e esta bem resumido, boa sorte!!!. Abra o 3Ds Max, aqui estou com a versão 8 mais pode ser a 9 com o plug-in que exporta em W3D. Você vai precisar de: 1 Sphere - Sera o objeto onde sera colidido com o cenario. 1 Box - Esse sera o personagem, ficara preso na Sphere. 1 Pode ser mais um Box para simular o Piso. Criando piso. Crie uma Box e posisione no meio da cena. Coloque o nome de piso Paramentros L:250 W:250 H:10 Ls:7 Ws:7 Hs:1 Converta para Poly e crie algums relevos usando o "Soft Selection" de edit Poly. Agora crie uma Sphere Coloque o nome de bola Parameters R:14 S:8 A Sphere não presiza ter muito segmentos pois vamos identificar ao Havok tratar o objeto com uma Sphera, dai então o caulo é feito emcima disto. Agora por ultimo criaremos uma box, e sera o personagem. Coloque o nome de character Paramenters L:5 W:30 H:60 Ls:1 Ws:1 Hs:1 Posicione + ou - como a figura na proxima pagina, so não esquece de deixa a So1 acima do piso, e o character junto com bola, unsando o Alinhamento do Max. Exporte para para W3D Shocwave 3D, coloque o nome de cena1. Tutorial Parte 2 Abra o seu Adobe Director, clique em File - Import e importe o arquivo "cena1". deixe o nome de cena1 para ele. Agora clique em Insert - Media Element - Havok Physic Engine e coloque o nome de havok. Arraste a cena1 para o Stage, Clique sobre ele, e va em Behavior, clique sobre o + e va em New Behavior... Abrindo a tela Script vamos começar a programar. Criando a variavaies. Ohhh estamos na parte mais importante da programação as variaveis. Para quem não foi apresentado vou apresar a vocês. Leitor esse é o commando "global", quando você criar uma variavel global ele vai invoca ela em todo lugar do seu jogo. cena1, cena2, cena3 Leitor esse é o commando "property", invoca apenas quando a cena1 é executada. Não fico muito claro mais é + ou - isso. vamos criar a variaveis global. Na tela de script digite: global cena, piso, character, bola, havok, gravidade property rb_piso, rb_character, rb_bola, onGround, myTimer, _gravity property vv, xx, yy, zz Pessoal agora no longo no tutorial vou explicando o porque da variaveis. Vamos iniciar. Digite ou copie né hehehe: --Ele irar executar tudo o que extiver dentro o beginSprite antes de qualquer coisa. Apenas uma vez. on beginSprite me --Gravidade = -974, gosto desse valor, você tambem pode mudar se quiser gravidade = -974 --cena = member("cena1") ou cena = member(1) cena = member(1) --reseta a cena1 como se você tivese acabo de importala cena.resetWorld() --importa o Havok Engine para a cena1 havok = member(2) --Importara os objetos da cena1, piso, character e bola piso = cena.model("piso") character = cena.model("character") bola = cena.model("bola") --Instala o Havok na cena1 havok.initialize(cena, 4, 0.0254) --Adiciona gravidade havok.gravity = vector( 0,0, gravidade ) --Adiciona os modificadores, essencial para o objeto se movimentar com o Havok piso.addModifier(#meshDeform) bola.addModifier(#meshDeform) --Adiciona o corpoRigido piso como fixo rb_piso = havok.makeFixedRigidBody(piso.name, false) rb_piso.friction = 0 rb_piso.restitution = 0 --Adiciona o corpoRigido bola como movel (bola.name, peso, convexo, tipo) rb_bola = havok.makeMovableRigidBody(bola.name, 100, true, #sphere) rb_bola.friction = 0 rb_bola.restitution = 0 --Detecta colisão entre a bola e o piso, e executa o commando hitDecor que sera publicado logo abaixo havok.registerInterest(bola.name, piso.name, 0, 0, #hitDecor, me) end Tutorial Parte 2 Agora entraremos na função on enterFrame on enterFrame me --Faz o pesoangen não esta interagindo com o chão pois ele so fica true quando a bola estiver sobre piso então onGround fica true --Esse teste é feito em havok.step onGround = false --Atualiza o Havok Engine em 60FPS exempo 1/60 = 0.01666 --Definimos 5 para substepes por exemplo em cada frame ele faz 5 calculos --Fica muito mais presizo havok.step( 0.01666, 5 ) --Quando a tecla "123" Left e "124" Right executa os comandos para girar o personagem --Para uma direção e a outra reversa if keyPressed(123) then character.rotate(vector(0,0,2)) else if keyPressed(124) then character.rotate(vector(0,0,-2)) end if --Quando presionar a tecla "125" Up e "126" Down ele da o valor -100 ou 100 de velocidade linear assim o personagem entrara em movimentno if keyPressed(125) then vv = -100 else if keyPressed(126) then vv = 100 else --vv = vv*.98 Esse escript vai dividindo a variavel vv então quando você largar do botão para cima ou para baixo a velocidade do personagem vai se dimuindo lentamente vv = vv*.93 end if --Aqui vereficamos o angulo que o character esta para ele sigui na direção exata onde ele foi rotacionado xx = character.transform.yAxis.x yy = character.transform.yAxis.y --Quando ele estiver sobre o piso ele irar executar a os commandos if (onGround) then --Amacia o fim da gravidade até a gravidade for 0 _gravity = _gravity*.98 --Atualiza a gravidade havok.gravity = vector( 0, 0, _gravity ) else --Retorna o valor da gravidade normal -974 _gravity = gravidade --Atualiza a gravidade havok.gravity = vector( 0, 0, _gravity ) end if --Atualiza o valor zz que é o valor em que o objeto esta em movimento no eixo z --Porque quando agente usar o commando linerVelocity ele irar remover qualquer outro valor, então criaamos a variavel para preservala zz = rb_bola.linearVelocity.z --Aqui é a função para a bola se moviemtar de acordo com a rotão do character --Usaremos tambem o zz que acabemos de criar rb_bola.linearVelocity=vector(vv*xx,vv*yy,zz) --Aqui faremos o character seguir a mesmo posição da bola character.transform.position = bola.transform.position --Agora por ultimo evitaremos que a bola rotacione como faria na vida real rb_bola.angularVelocity=vector(0,0,0) end --Criaremos a função para o comando dado logo atras ainda em beginSprite me on hitDecor me, info --Quando hitDecor foi ativado ele declarara a variavel onGround como true pois o piso e bola estarão em colisão. onGround = true end Ta ai fiz correndo o tutorial, e perdoeme pelas falhas de portugues. O link com todo o projeto esta aqui. http://sunag.discovirtual.uol.com.br/disco_virtual/xirak/characteregine.rar A senha é: 12345 Espero que gostem. Abraço
Jean Carlo Deconto / Sunag Entertainment http://www.sunag.com.br/
vixe q ficou grande depois vou dar uma lida pra se eu intendo auguma coisa ehehehehehhehe falow rox
Puts hehehe ficou grande o tutorial mesmo, se alguem tiver alguma duvida posta ai e baixem ali o arquivo do projeto vai ajudar bastante tambem.
Jean Carlo Deconto / Sunag Entertainment http://www.sunag.com.br/
rapaz!!!!!!! ficou muito massa!!! mas olha quando vc publica ele no director para gerar o arquivo "character egine.exe" ele fica aberto apenas 1 segundo, pq tem apenas 1 frame, vc sabe deixar isso estatico?? isso seria uma divida mais do director Mx, valew cara!! e parabéns!!!
by helotas
Valeu Helotas, falto testa isso, tinha que adiciona o script: on exitFrame me go the frame end La no Score script... Mais já atualizei o arquivo baixa ele denovo que agora ta certinho. Obrigado abraço
Jean Carlo Deconto / Sunag Entertainment http://www.sunag.com.br/
oi cara eu gostei do logaritmo mas eu gostaria de saber se vc poderia depois me explicar melhor como e essa integraçao com o havok pq eu sou novo com havok e fico meio perdido na hora de programar com a engine dele mas vlw pelo tuto.
Oi Lanks, O Havok é engine de fisica do Director. É engine que controla os "movimentos", como colisão, efeitos gravitacionais, torque, etc. O que faz a renderização da imagem é outra api e do som também. Recomendo o CodeRecipe, tem varios source lá: http://coderecipe.com/ O segredo destes programas e ficar insistindo e pesquisando. Abraços
Jean Carlo Deconto / Sunag Entertainment http://www.sunag.com.br/

Faça o login para poder comentar

Usuários conectados

Total de mensagens publicadas pelos membros da comunidade: 711056.

Total de membros registrados: 138529

Últimos membros registrados: Gebio, MARCELO1977, breno001, erotique, Amândio Augusto Tavares , miteoelon, JointCare11, LumiLeanAvis Prix.

Usuário(s) on-line na última hora: 1251, sendo 5 membro(s) e 1246 visitante(s).

Membro(s) on-line na última hora: jessicatorres, Negreiroscg, billypaul, Starter, Allen Anderson.

Legenda: Administrador, Especial, Moderador, Parceiro .

3D1 © Três D1 © 1999-2024. Todos direitos reservados.