Preciso recomeçar a ação do goleiro!

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Preciso recomeçar a ação do goleiro!

Mensagem por Kleber Sampaio Correia em Qua 08 Ago 2012, 13:01

Estou fazendo um jogo de futebol baseado a engine de Thyago que tava fazendo o Mega Soccer!
Mas estou com problema porque já pois uma AI diferenciada pro goleiro, mas ele pega a bola e chuta, e depois ele fica indo para vários lados como se fosse rodando na área do gol, como se ele estivesse seguindo pra onde a bola foi. O jogo começa com os goleiros parados, eles só se movem quando a bola está perto, mas depois não param mais, ficam rodando, girando, dando curvas andando. Eu queria que depois de eles chutarem a bola, ele parece de se mover, até que a bola de novo chegasse perto e virasse um ciclo de ele só se movimentar quando a bola chegar perto,chutar e depois voltar pro lugar parado.

Kleber Sampaio Correia

Número de Mensagens : 13
Idade : 23
Data de inscrição : 11/07/2011
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Preciso recomeçar a ação do goleiro!

Mensagem por theguitarmester em Qua 08 Ago 2012, 13:41

mostre os códigos usados, para fazer as açoes escritas, mostre tambem os códigos que envolve os ângulos.

theguitarmester

Ranking : Sem avaliações
Número de Mensagens : 1908
Idade : 21
Data de inscrição : 28/02/2012
Notas recebidas : B
Reputação : 80
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 2
   : 2
   : 1

http://guitarmester.no.comunidades.net/index.php?pagina=19362978

Voltar ao Topo Ir em baixo

Re: Preciso recomeçar a ação do goleiro!

Mensagem por Kleber Sampaio Correia em Qua 08 Ago 2012, 14:10

Está em Script usado pelo step
Código:

//mais proximo da bola
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

if(distance_to_object(obj_bola)<global.p1_mais_proximo_distancia){
global.p1_mais_proximo=object_index;
}
if(global.p1_mais_proximo=object_index){
global.p1_mais_proximo_distancia=distance_to_object(obj_bola);}
if(global.com_a_bola=object_index){velocidade=4.5}else{velocidade=5.5};
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//movimentacao
//movimenta??o basica sem a bola
if((global.p1_mais_proximo!=object_index ) or global.tiro_de_meta=2){
if(global.tiro_de_meta=2){xx[2]=xx[1]};else{
if (distance_to_point(x,yy[2])<3 and goleiro=false){
yy[2]=min(1300,max(100, yy[1]+irandom_range(-200,200)))
};
if(distance_to_point(xx[2],y)<3 and lateral =false and goleiro=false and atacante=false){
xx[2]=min(2000,((xx[1])+250+
irandom_range(-100,100)))
};
if (atacante=true and distance_to_point(xx[2],y)<3){xx[2]=min(2000,max(xx[1]+800,obj_bola.x)+irandom_range(-100,100))};
if (lateral=true and global.com_a_bola=object_index=false){xx[2]=min(2000,obj_bola.x);yy[2]=yy[1] };
}
}
else
{
if(global.com_a_bola!=object_index
 and ((goleiro=false and global.tiro_de_meta=0)or (goleiro=true and global.tiro_de_meta=1))){
xx[2]=max(100,min(2100,obj_bola.x))
yy[2]= max(0,min(1400,obj_bola.y));
}

}
//dominando a bola
if(place_meeting(x,y,obj_bola)
and obj_bola.altura<2
and obj_bola.dominavel=true
and global.com_a_bola=object_index=false){
 global.recptor=object_index;
with(all){
drible=0;
if variable_local_exists('player'){if(player=2){ um_dois=false}}}
if(obj_bola.um_dois=noone){with(all){if variable_local_exists('player'){ um_dois=false}}}
if(global.com_a_bola=obj_bola){
obj_bola.dominavel=false;
obj_bola.tempo=40;
obj_bola.speed=0;
};
if(obj_bola.um_dois=object_index){
obj_bola.um_dois=false;
}
obj_bola.play=player;
global.com_a_bola=object_index;
};
//corte seco

if(driblado>0){driblado-=1};
if(drible>0){drible-=1;xx[2]=obj_bola.x;yy[2]=obj_bola.y};
if(global.com_a_bola=object_index){

if(!place_free(x+lengthdir_x(100,direction),y+lengthdir_y(100,direction))){
if (!place_free(x+lengthdir_x(100,direction+45),y+lengthdir_y(100,direction+45))){
drible=150;
with(all){if(variable_local_exists('player')){
if(player=2 and distance_to_object(obj_bola)<=100){
driblado=50;}}
}
global.com_a_bola=obj_bola;
direction-=45;
obj_bola.direction=direction;
obj_bola.speed=7.5;}
//
{
if (!place_free(x+lengthdir_x(100,direction-45),y+lengthdir_y(100,direction-45))){
drible=150;
with(all){if(variable_local_exists('player')){
if(player=2 and distance_to_object(obj_bola)<=100){
driblado=30;}}
}
global.com_a_bola=obj_bola;
direction+=45;
obj_bola.direction=direction;
obj_bola.speed=7.5;}
}

}}

//estou com a bola,vou avan?ar
if((global.com_a_bola=object_index and goleiro=false)
or(um_dois=true and goleiro=false))
and (drible=0)
{global.recptor=obj_controle;
xx[2]=min(2100,x+100);
yy[2]=y;
};
//estou marcado
if(distance_to_object(global.p2_mais_proximo)<44 and global.com_a_bola=object_index){
marcado=true;
}else{
marcado=false;
}
/////////////////////////////////////////////////////////////////{
//para quem passar a bola?
a=0;
while(recptor.x<x-200 or recptor=object_index)and a<100{
a+=1;
recptor=choose(obj_p1_2,obj_p1_3,obj_p1_4,obj_p1_5,obj_p1_6,obj_p1_7,obj_p1_8,obj_p1_9,obj_p1_10,obj_p1_11)}
//chute
chute=irandom(distance_to_point(2100,700))

if(global.com_a_bola=object_index and chute<20 and x>1600){
direcao_do_chute=point_direction(x,y,2200,irandom_range(450,950))
obj_bola.dominavel=false;
obj_bola.tempo=5;
global.com_a_bola=obj_bola;
obj_bola.direction=direcao_do_chute;
obj_bola.speed=30;
global.recptor=obj_controle;
}

//passe
if(global.com_a_bola=object_index and (
distance_to_object(recptor)>100 and
recptor.x+300>x and
(
(marcado=true)
or(irandom(room_speed*15)<=(volume_de_passes))
or(lateral=true and x>1900)
or(obj_bola.um_dois>0)
)
or
(
  (goleiro=true)
or(global.lateral=2)
or(global.inicio=false)
or(global.gol=2)
)
))
{
with(all){
xx[2]=x;
yy[2]=y;}
global.gol=0;
global.inicio=true;
//um dois

if(irandom(10)<=volume_de_um_dois)
{
if(obj_bola.um_dois=noone)
{
if(recptor.x>x-150 and recptor.x<x+300
and(max(y,recptor.y)-min(y,recptor.y))<600
and (distance_to_object(recptor)>60)
){
obj_bola.um_dois=object_index;
um_dois=true;}
}
else{
if(obj_bola.um_dois.player=1)
{recptor=obj_bola.um_dois;}
}
}
/////////////////////////////
global.com_a_bola=obj_bola;
global.recptor=recptor;
scr_bola_alta();
with(obj_bola){
dominavel=false;
tempo=5;
global.lateral=false;
global.tiro_de_meta=0;
speed=round(max(16,min(26,distance_to_object(global.recptor)/20)))
if(global.recptor=um_dois){
//alvo em movimento
ii=0;
tempo_chegada=10;
a=0;
while(ii<tempo_chegada*2 )and a<100{
ii+=1;a+=1;

tempo_chegada=distance_to_point(global.recptor.x+ii,global.recptor.y)/speed
}
direction=point_direction(x,y,min(2100,global.recptor.x+(ii*2)),global.recptor.y);
obj_bola.um_dois=noone;
}
else
{
direction=point_direction(obj_bola.x,obj_bola.y,global.recptor.x,global.recptor.y);
}
};

recptor=object_index;
};

//////////////////////////////////////////////////////////////////}
if(
((global.recptor=object_index and um_dois=false)
and global.com_a_bola=object_index=false)and drible=0)
or(global.lateral=true and obj_bola.play=1 and distance_to_object(obj_bola)<100 )
or(global.inicio=false and global.p1_mais_proximo!=object_index)
or(global.gol=1)
or(global.gol=2 and global.p1_mais_proximo!=object_index)
or driblado>0
{exit}
{
{
mp_potential_step(xx[2],yy[2],velocidade,0)
}
};

e outro step sem estar em script

Código:

if distance_to_object(obj_bola)<50{direction=point_direction(x,y,obj_bola.x,obj_bola.y)speed=7.5}

Kleber Sampaio Correia

Número de Mensagens : 13
Idade : 23
Data de inscrição : 11/07/2011
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Preciso recomeçar a ação do goleiro!

Mensagem por un00brn em Qua 08 Ago 2012, 15:44

Explique o que cada variável dessa significa, pq, Um script desse tamanho sem comentário sobre as variáveis fica difícil! Foi você que criou esse script?

un00brn

Número de Mensagens : 117
Idade : 18
Data de inscrição : 18/06/2012
Reputação : 7
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://www.djurielrn.blogspot.com

Voltar ao Topo Ir em baixo

Re: Preciso recomeçar a ação do goleiro!

Mensagem por Kleber Sampaio Correia em Qua 08 Ago 2012, 23:00

Não precisa estudar o código, eu só preciso saber o que usar para acabar uma ação e começar outra. Exemplo: essa ação toda começa com o goleiro parado, quando ele vê a bola chegando ele fica se mexendo para tentar pega-la, mas depois de pega-la e chuta-la ele continua girando. Eu queria que ele voltasse pro 0, para ficar parado esperando a bola chegar perto outra vez.

Essa é a parte que ele vê a bola chegando ou de longe e fica rodando.
Código:

//alvo em movimento
ii=0;
tempo_chegada=10;
a=0;
while(ii<tempo_chegada*2 )and a<100{
ii+=1;a+=1;

tempo_chegada=distance_to_point(global.recptor.x+ii,global.recptor.y)/speed
}
direction=point_direction(x,y,min(2100,global.recptor.x+(ii*2)),global.recptor.y);
obj_bola.um_dois=noone;
}
else
{
direction=point_direction(obj_bola.x,obj_bola.y,global.recptor.x,global.recptor.y);
}
};

recptor=object_index;
};

Kleber Sampaio Correia

Número de Mensagens : 13
Idade : 23
Data de inscrição : 11/07/2011
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Preciso recomeçar a ação do goleiro!

Mensagem por Kleber Sampaio Correia em Qua 08 Ago 2012, 23:00

Usa o que, else, while, with?
ou algum jeito no drag and drop?

Kleber Sampaio Correia

Número de Mensagens : 13
Idade : 23
Data de inscrição : 11/07/2011
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Preciso recomeçar a ação do goleiro!

Mensagem por Conteúdo patrocinado Hoje à(s) 11:45


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum