|
|
|
Autor |
Mensagem |
Mililo
Usuário
Registrado: 05/12/08 Mensagens: 366 Localização: Santo Antônio de Pádua / RJ |
|
|
|
Não esse script eu já testei com 14 waypoints e funciona normal, não sei se entendi bem sua dúvida mas acho que o que está te confundindo é o fato de eu não ter usado getcollidedobject, mas é porque na verdade eu usei a distância(getobjectdistance), quando a distância entre o objeto e o waypoint for pequena(menor que 1) ele passa pro próximo.
Dei uma polida nesse script hj de manha, vou postar ele aqui, usei um atorMD2(o espantalho) e coloquei animação:
Fiz de dois modos:
Persegue continuamente os waypoints(quando chega no ultimo volta pro primeiro)
| | var maxN:integer;
maxN:=14;
var nome, base : string;
nome := 'MD2Actor0';
base := 'path';
if GetObjectDistance(nome, base + floattostr(ReadGlobalVar('N'))) > 1 then
begin
PointObjectTo(nome, base + floattostr(ReadGlobalVar('N')));
ApplyForce(nome, 10000, 0, 0);
if GetObjectAnimation(nome) <> '02run0' then
SetObjectAnimation(nome, '02run0');
end else begin
if ReadGlobalVar('N') < maxN then
WriteGlobalVar('N', ReadGlobalVar('N')+1)
else
WriteGlobalVar('N', 1);
end; |
Persegue os waypoints até o último e para(e muda animação para stand)
| | var maxN:integer;
maxN:=14;
var nome, base : string;
nome := 'MD2Actor0';
base := 'path';
if GetObjectDistance(nome, base + floattostr(ReadGlobalVar('N'))) > 1 then
begin
PointObjectTo(nome, base + floattostr(ReadGlobalVar('N')));
ApplyForce(nome, 10000, 0, 0);
if GetObjectAnimation(nome) <> '02run0' then
SetObjectAnimation(nome, '02run0');
end else begin
if ReadGlobalVar('N') < maxN then
WriteGlobalVar('N', ReadGlobalVar('N')+1)
else
WriteGlobalVar('N', 1);
//if GetObjectAnimation(nome) <> '01stand0' then
//SetObjectAnimation(nome, '01stand0');
end; |
|
|
Dom Mar 28, 2010 5:26 pm |
|
|
Mililo
Usuário
Registrado: 05/12/08 Mensagens: 366 Localização: Santo Antônio de Pádua / RJ |
|
|
|
Ops postei o segundo script errado(não vivo sem botao edit =/), ali ele está fazendo a mesma coisa do primeiro e a parte da animação voltar para stand tá comentada...
Persegue os waypoints até o último e para(e muda animação para stand):
| | var maxN:integer;
maxN:=14;
var nome, base : string;
nome := 'MD2Actor0';
base := 'path';
if GetObjectDistance(nome, base + floattostr(ReadGlobalVar('N'))) > 1 then
begin
PointObjectTo(nome, base + floattostr(ReadGlobalVar('N')));
ApplyForce(nome, 10000, 0, 0);
if GetObjectAnimation(nome) <> '02run0' then
SetObjectAnimation(nome, '02run0');
end else begin
if ReadGlobalVar('N') < maxN then
WriteGlobalVar('N', ReadGlobalVar('N')+1)
else
if GetObjectAnimation(nome) <> '01stand0' then
SetObjectAnimation(nome, '01stand0');
end; |
Lemos agora acho que entendi o que você quis dizer, mas minha intenção era fazer aquele mesmo, ir até o ultimo waypoint e parar lá, para fazer uma movimentção continua aí já é daquele jeito que eu postei no post acima.
Eu vou tentar agora colocar isso numa função.. daí acho que nem preciso usar GlobalVar...
|
|
Dom Mar 28, 2010 5:36 pm |
|
|
Lemos
Usuário
Registrado: 14/04/09 Mensagens: 802 Localização: Rio de Janeiro - RJ |
|
|
|
A minha dúvida é o seguinte, veja essa parte do seu script:
if ReadGlobalVar('N') < maxN then
WriteGlobalVar('N', ReadGlobalVar('N')+1)
Digamos que começou a ação, a variável está em 1 e o espantalho vai para 1, mas numa fração de segundos, ela muda, para 2, para 3, 4 e 5 e pára em cinco, não dá tempo do espantalho ir para 1, nem para 2, 3, ou 4, pque ela praticamente salta de 1 para 5! No meu script, essa ação só ocorre com a colisão com o próximo objeto.
No meu entender, quando ele estivesse correndo para 1, a mudança para 2 só deveria correr quando ele estivesse perto, ou colidisse com o objeto 1.
Espero que tenha me explicado direito...
Abraço
_________________ Lemos
http://alemdanimacao.zip.net/
|
|
Dom Mar 28, 2010 8:46 pm |
|
|
Mililo
Usuário
Registrado: 05/12/08 Mensagens: 366 Localização: Santo Antônio de Pádua / RJ |
|
|
|
Na verdade você não entendeu bem a sintaxe, eu usei a distância como critério, olha sequência do if:
| | if GetObjectDistance(nome, base + floattostr(ReadGlobalVar('N'))) > 1 then
begin
// CODIGO
end else begin
if ReadGlobalVar('N') < maxN then
WriteGlobalVar('N', ReadGlobalVar('N')+1);
end;
|
O primeiro if lá de cima checa se a distância é maior que 1, e o de baixa checa o contário(se é menor que 1, o que significa que está perto(colidindo)), só depois de colidir(diatncia<1) é que vem o código:
| | if ReadGlobalVar('N') < maxN then
WriteGlobalVar('N', ReadGlobalVar('N')+1); |
Abraço.
|
|
Seg Mar 29, 2010 5:00 pm |
|
|
alvarohsp
Usuário
Registrado: 30/01/10 Mensagens: 125 Localização: Barra Mansa |
|
|
|
eu nunca vi um script como esse,mas funcionou,mas a animaçao (run) está travando
_________________ Não faça de sua vida um rascunho, pois pode não dar tempo de passar a limpo... |
|
Seg Mar 29, 2010 9:39 pm |
|
|
Mililo
Usuário
Registrado: 05/12/08 Mensagens: 366 Localização: Santo Antônio de Pádua / RJ |
|
|
|
Como assim travando?
Note que postei dois scripts, você quer que ele fique sempre seguindo a rota ou que siga e pare quando chegar no final?
|
|
Ter Mar 30, 2010 1:40 am |
|
|
Lemos
Usuário
Registrado: 14/04/09 Mensagens: 802 Localização: Rio de Janeiro - RJ |
|
|
|
| | O primeiro if lá de cima checa se a distância é maior que 1, e o de baixa checa o contário(se é menor que 1, o que significa que está perto(colidindo)), só depois de colidir(diatncia<1) é que vem o código:
| | if ReadGlobalVar('N') < maxN then
WriteGlobalVar('N', ReadGlobalVar('N')+1); |
Abraço. |
Entendi, então, como o script tem que ser totalmente executado antes de ser executado de novo, na hora em que ele for lido novamente não poderá ser executado, pque a distância já não é > 1, ele já está muito próximo do objeto! Realmente, muito prático e inteligente o script, pequeno e funcional! Parabéns mesmo, tá valendo ser colocado na seção de tutoriais!
Abraço
_________________ Lemos
http://alemdanimacao.zip.net/
|
|
Ter Mar 30, 2010 10:38 am |
|
|
johnny.dias89
Usuário
Registrado: 02/03/10 Mensagens: 412 Localização: São Paulo |
|
|
|
| | eu nunca vi um script como esse,mas funcionou,mas a animaçao (run) está travando |
Cara tente alterar no script a 02run0 para 01run0, aqui no meu micro esta cadastrado como 01run0...
Abraços...
_________________ Att.
Johnny Dias |
|
Ter Mar 30, 2010 1:07 pm |
|
|
|
|
|
|
|
|