Erro de Script: animação executada só uma vez
Ir à página 1, 2  Próximo
 
   3D Game Builder - Índice » Programação
Erro de Script: animação executada só uma vez
Autor Mensagem
Lemos
Usuário
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.Cool 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.Cool and (not iskeypress(37)) and (not iskeypress(3Cool) 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 Exibir perfil de usuários
Mililo
Usuário
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:
Código:
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 Exibir perfil de usuários
Lemos
Usuário
Usuário


Registrado: 14/04/09
Mensagens: 802
Localização: Rio de Janeiro - RJ

Mililo escreveu:
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:
Código:
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... Rolling Eyes
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 Exibir perfil de usuários
Mililo
Usuário
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 Sad

_________________
"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 Exibir perfil de usuários
Edirlei
Administrador
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 Exibir perfil de usuários
Lemos
Usuário
Usuário


Registrado: 14/04/09
Mensagens: 802
Localização: Rio de Janeiro - RJ

Edirlei escreveu:
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 Exibir perfil de usuários
Lemos
Usuário
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 Exibir perfil de usuários
Mililo
Usuário
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 Laughing.

_________________
"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 Exibir perfil de usuários
   3D Game Builder - Índice » Programação Ir à página 1, 2  Próximo
Página 1 de 2