Como Fazer Rota
Ir à página Anterior  1, 2
 
   3D Game Builder - Índice » Programação
Como Fazer Rota
Autor Mensagem
Mililo
Usuário
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)
Código:
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)
Código:
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 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

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):
Código:
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 Exibir perfil de usuários
Lemos
Usuário
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 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

Na verdade você não entendeu bem a sintaxe, eu usei a distância como critério, olha sequência do if:
Código:
 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:
Código:
if ReadGlobalVar('N') < maxN then
WriteGlobalVar('N', ReadGlobalVar('N')+1);


Abraço.
Seg Mar 29, 2010 5:00 pm Exibir perfil de usuários
alvarohsp
Usuário
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 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

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


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

Mililo escreveu:
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:
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! Shocked Realmente, muito prático e inteligente o script, pequeno e funcional! Parabéns mesmo, tá valendo ser colocado na seção de tutoriais! Very Happy

Abraço

_________________
Lemos
http://alemdanimacao.zip.net/
Ter Mar 30, 2010 10:38 am Exibir perfil de usuários
johnny.dias89
Usuário
Usuário


Registrado: 02/03/10
Mensagens: 412
Localização: São Paulo

alvarohsp escreveu:
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 Exibir perfil de usuários
   3D Game Builder - Índice » Programação Ir à página Anterior  1, 2
Página 2 de 2