 |
 |
 |
Autor |
Mensagem |
Lemos
Usuário


Registrado: 14/04/09 Mensagens: 802 Localização: Rio de Janeiro - RJ |
|
Erro de Script: animação executada só uma vez |
|
Amigos, fiz um script inicial de teste, falta muita coisa, mas tem uma coisa que tá me encucando é que a animação pain do ator md2 da swatt não é executada várias vezes, durante o ataque do robô. O robô bate e o personagem executa a animação 1 vez e fica ali congelado, apanhando, até que eu o tire de lá e eu queria que a animação fosse executada em loop, várias vezes, enquanto durasse o ataque.
Esse script está no evento mainloop do mapa. Vejam:
//---Begin Script Builder: RoboPrincipal Perseguir Jogador---//
if (GetObjectDistance('RoboPrincipal','Player') < 6) and (GetObjectDistance('RoboPrincipal','Player') >= 0. then
begin
if GetObjectAnimation('RoboPrincipal') <> 'run' then
SetObjectAnimation('RoboPrincipal', 'run');
PointObjectTo('RoboPrincipal', 'Player');
ApplyForce('RoboPrincipal', 1500, 0, 0);
end
else if (GetObjectDistance('RoboPrincipal','Player') < 0. and (not iskeypress(37)) and (not iskeypress(3 ) and (not iskeypress(39)) and (not iskeypress(40)) then
begin
if GetObjectAnimation('RoboPrincipal') <> 'attack' then
SetObjectAnimation('RoboPrincipal', 'attack');
PointObjectTo('RoboPrincipal', 'Player');
if GetObjectAnimation('MainActor') <> 'pain' then
SetObjectAnimation('MainActor', 'pain');
SetObjectAnimationMode('MainActor', 'loop');
if GetObjectAnimation('mainactorweapon') <> 'pain' then
SetObjectAnimation('mainactorweapon', 'pain');
SetObjectAnimationMode('mainactorweapon', 'loop');
end
else if GetObjectAnimation('RoboPrincipal') <> 'stand' then
begin
SetObjectAnimation('RoboPrincipal', 'stand');
end;
//---End Script Builder---//
Fico no aguardo
_________________ Lemos
http://alemdanimacao.zip.net/
 |
|
Sex Jul 24, 2009 12:29 am |
 |
 |
Mililo
Usuário


Registrado: 05/12/08 Mensagens: 366 Localização: Santo Antônio de Pádua / RJ |
|
|
|
Estranho, será que não é algum script em outro lugar que está mudando o AnimationMode para PlayOnce?
Pelo que vi o AnimationMode só fica MainLoop se essa condição for obedecida:
 |  | else if (GetObjectDistance('RoboPrincipal','Player') < 0. and (not iskeypress(37)) and (not iskeypress(3) and (not iskeypress(39)) and (not iskeypress(40)) then
[color=red]Não deu para copiar direito pque no seu ta aparecendo emoticons em alguns lugares do codigo[/color] |
Talvez esta condição esteja deixando de ser obedecida e o AnimationMode mudando para PlayOnce em vez de Loop(via algum outro código) mas a animação continuando em Pain porque nada muda ela(neste outro código).
Foi a única conclusão que consegui chegar, mas não sei, talvez o Edirlei possa te ajudar melhor.
_________________ "Em verdade, em verdade te digo que se alguém não nascer de novo, não pode ver o reino de Deus."
"Porque pela graça sois salvos, mediante a fé; e isto não vem de vós, é dom de Deus; não de obras, para que ninguém se glorie."
----
www.aquiestamos-juventude.blogspot.com
http://todosnecessitam.blogspot.com/ |
|
Sex Jul 24, 2009 10:50 am |
 |
 |
Lemos
Usuário


Registrado: 14/04/09 Mensagens: 802 Localização: Rio de Janeiro - RJ |
|
|
|
 |  | Estranho, será que não é algum script em outro lugar que está mudando o AnimationMode para PlayOnce?
Pelo que vi o AnimationMode só fica MainLoop se essa condição for obedecida:
 |  | else if (GetObjectDistance('RoboPrincipal','Player') < 0. and (not iskeypress(37)) and (not iskeypress(3) and (not iskeypress(39)) and (not iskeypress(40)) then
[color=red]Não deu para copiar direito pque no seu ta aparecendo emoticons em alguns lugares do codigo[/color] |
Talvez esta condição esteja deixando de ser obedecida e o AnimationMode mudando para PlayOnce em vez de Loop(via algum outro código) mas a animação continuando em Pain porque nada muda ela(neste outro código).
Foi a única conclusão que consegui chegar, mas não sei, talvez o Edirlei possa te ajudar melhor. |
Mililo, obrigado por responder.
Como eu imaginei, esse é o tipo de coisa em que parece que tá tudo certo e mesmo assim não funciona...
Bom, os emoticons apareceram pque a distância da ação é 0.8. Não sei se tem a ver com a proximidade dos campos de colisão dos dois, mas nessa distância se você ver de lado ainda está falso, o robô bate mas você vê que o jogador executa a ação sem ser atingido realmente. Pretendo ir reduzindo essa distância oas poucos, para ver se melhora.
Se eu não colocar a condição das teclas direcionais, quando ocorre a ação e o jogador entra na porrada (nessa condição ele fica paradão, meio caído para trás, mas não se mexe, é como se estivesse sendo usado o playonce!), ao pressionar as teclas ele vai se movendo congelado, sendo arrastado, até que a distância fique maior que 0.8 e aí sim ele começa a correr. Do jeito que está, imediatamente quando apertamos as teclas, ele corre e se livra do robô.
Tentei no animationmode o none e o loop, como está aí, e também testei sem essa linha do animationmode, que só coloquei para tentar solucionar o problema.
O script completo do robô está aí, não tem outro para ele e nem pro jogador principal. Por enquanto ele tá parado, esperando a aproximação para iniciar a perseguição, executando a animação stand.
Se eu descobrir alguma coisa, posto aqui, por agora estou mexendo em outras coisas do jogo para poder postar um screenshot.
No momento, meu maior problema é salvar as coisas, com o volume do objetos, a maioria do 3dgb, mesmo que copiados e colados para aliviar a memória, o salvamento do jogo para ver rodando está muito lento, uns 2 ou 3 minutos... Bom, Celeron é celeron, espero um dia ter um Core 2 duo ou superior...
Abraço
_________________ Lemos
http://alemdanimacao.zip.net/
 |
|
Sex Jul 24, 2009 12:18 pm |
 |
 |
Mililo
Usuário


Registrado: 05/12/08 Mensagens: 366 Localização: Santo Antônio de Pádua / RJ |
|
|
|
É não sei direito o que pode ser... eu também to fazendo meu jogo por isso não posso testar, mas se der eu tento.
E quanto aos emoticons, você pode usar o comando 'Code' do forum, nele acho que não carrega esses códigos(tanto que meu codigo de color não funcionou no meu outro post).
E quanto ao tempo de carregamento, não é só você, o meu também tá em, mais ou menos, 2min.
Aqui: Pentium 4 3.06GHz, Geforce 6200, 768RAM - Sei que é um lixo 
_________________ "Em verdade, em verdade te digo que se alguém não nascer de novo, não pode ver o reino de Deus."
"Porque pela graça sois salvos, mediante a fé; e isto não vem de vós, é dom de Deus; não de obras, para que ninguém se glorie."
----
www.aquiestamos-juventude.blogspot.com
http://todosnecessitam.blogspot.com/ |
|
Sex Jul 24, 2009 1:02 pm |
 |
 |
Edirlei
Administrador


Registrado: 15/03/08 Mensagens: 760
|
|
|
|
Não tive tempo para testar, mas tente editar os if onde você altera a animação dos personagens colocando um begin e um end de modo que o SetObjectAnimationMode só seja executado uma única vez junto com o SetObjectAnimation.
Se isso não funcionar você também pode tentar desabilitar as animações automáticas do ator principal no momento do ataque, se não mesmo que você altere as animações no script o código interno do 3D Game Builder vai restaurar elas para o padrão.
|
|
Sex Jul 24, 2009 4:14 pm |
 |
 |
Lemos
Usuário


Registrado: 14/04/09 Mensagens: 802 Localização: Rio de Janeiro - RJ |
|
|
|
 |  | Não tive tempo para testar, mas tente editar os if onde você altera a animação dos personagens colocando um begin e um end de modo que o SetObjectAnimationMode só seja executado uma única vez junto com o SetObjectAnimation.
Se isso não funcionar você também pode tentar desabilitar as animações automáticas do ator principal no momento do ataque, se não mesmo que você altere as animações no script o código interno do 3D Game Builder vai restaurar elas para o padrão. |
Coloquei assim:
//---Begin Script Builder: RoboPrincipal Perseguir Jogador---//
if (GetObjectDistance('RoboPrincipal','Player') < 6) and (GetObjectDistance('RoboPrincipal','Player') >= 0.8) then
begin
if GetObjectAnimation('RoboPrincipal') <> 'run' then
SetObjectAnimation('RoboPrincipal', 'run');
PointObjectTo('RoboPrincipal', 'Player');
ApplyForce('RoboPrincipal', 1500, 0, 0);
end
else if (GetObjectDistance('RoboPrincipal','Player') < 0.8) and (not iskeypress(37)) and (not iskeypress(38)) and (not iskeypress(39)) and (not iskeypress(40)) then
begin
if GetObjectAnimation('RoboPrincipal') <> 'attack' then
begin
SetObjectAnimation('RoboPrincipal', 'attack');
PointObjectTo('RoboPrincipal', 'Player');
end
else if GetObjectAnimation('MainActor') <> 'pain' then
begin
SetObjectAnimation('MainActor', 'pain');
SetObjectAnimationMode('MainActor', 'loop');
end
else if GetObjectAnimation('mainactorweapon') <> 'pain' then
begin
SetObjectAnimation('mainactorweapon', 'pain');
SetObjectAnimationMode('mainactorweapon', 'loop');
end
else if GetObjectAnimation('RoboPrincipal') <> 'stand' then
begin
SetObjectAnimation('RoboPrincipal', 'stand');
end
end;
//---End Script Builder---//
Mas infelizmente, continua congelando, nada mudou. Eu ainda não fechei e abri o aplicativo, às vezes dá certo. Se tiver mais alguma novidade, posto aqui.
_________________ Lemos
http://alemdanimacao.zip.net/
 |
|
Sex Jul 24, 2009 5:03 pm |
 |
 |
Lemos
Usuário


Registrado: 14/04/09 Mensagens: 802 Localização: Rio de Janeiro - RJ |
|
|
|
Uma outra curiosidade, neste projeto existem sons de passos do ator principal, que são ativados através da tecla direcional 38. Tentei usar o mesmo script para gerar o som de disparo da arma, mas a tecla padrão, de espaço, é 0x20 e esse valor é rejeitado pelo script... Qualquer outro valor é aceito normalmente, isso me obriga a mudar a tecla de disparo, mas a barra de espaço é bem legal...
_________________ Lemos
http://alemdanimacao.zip.net/
 |
|
Sex Jul 24, 2009 5:11 pm |
 |
 |
Mililo
Usuário


Registrado: 05/12/08 Mensagens: 366 Localização: Santo Antônio de Pádua / RJ |
|
|
|
Eu já tive esse problema, é só usar strtoint(0x20).
Bom não lembro bem mas acho que é isso sim .
_________________ "Em verdade, em verdade te digo que se alguém não nascer de novo, não pode ver o reino de Deus."
"Porque pela graça sois salvos, mediante a fé; e isto não vem de vós, é dom de Deus; não de obras, para que ninguém se glorie."
----
www.aquiestamos-juventude.blogspot.com
http://todosnecessitam.blogspot.com/ |
|
Sáb Jul 25, 2009 12:03 pm |
 |
 |
|
|
 |
 |
 |
|