AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  Connexion  

Partagez | 
 

 Chute et saut ennemi

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Skymar
Débutant
avatar

Messages : 28
Localisation : Ile-De-France
Projet Actuel : Mini-jeu "Gurdil" pour concours a Isart Digital

MessageSujet: Chute et saut ennemi   Ven 20 Déc 2013 - 18:18

Bonsoir,j'ai un nouveau probleme \o/ Je voudrais que les ennemies qui tombe d'une certaines hauteur (disons plus de 32px) et bien tombe a la verticale et non pas ,comme ils font actuellement,de venir en diagonales vers mon perso.Je voudrais egalement qu'ils sautes quand un obstacle est entre eux et mon perso.
Comme je sais que j'explique mal,je vous ai fait un petit dessin ,a gauche ,c'est actuellement ,et a droite ce que je voudrais



Et voici le code que j'utilise actuellement

if !position_meeting(x,y,zone_action)
{
if path_ok==1
{
path_ok=0
path_start(path0,2.5,1,0)
}}
else
{
path_ok=1
path_end()
move_towards_point(perso.x,perso.y,6)
if position_meeting(x,y,0)
{
if !position_meeting(x,y,solid)
{
motion_set(270,2)
move_towards_point(perso.x,perso.y,0)
}
if position_meeting(x,y,obstaclee)
vspeed=-8
}
}

Merci d'avance et merci chopsuey pour la premiere partie du code  awesome 
Revenir en haut Aller en bas
Alexandre13660
Bavard
avatar

Messages : 98
Projet Actuel : Cerebral Teste

MessageSujet: Re: Chute et saut ennemi   Ven 20 Déc 2013 - 20:05

Personnellement, j'utilise des blocs invisibles. Ca prends plus de temps mais chacun sa méthode.
Revenir en haut Aller en bas
Skymar
Débutant
avatar

Messages : 28
Localisation : Ile-De-France
Projet Actuel : Mini-jeu "Gurdil" pour concours a Isart Digital

MessageSujet: Re: Chute et saut ennemi   Ven 20 Déc 2013 - 20:18

Comment ca ? (même si ca m’étonnerais que ca me convienne )
Revenir en haut Aller en bas
chopsuey
Utilisateur confirmé: Rang ***
avatar

Messages : 523
Localisation : saint etienne
Projet Actuel : All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
...

MessageSujet: Re: Chute et saut ennemi   Ven 20 Déc 2013 - 20:44

Je peux te proposer un code par ce que sinon ya trop de trucs qui vont pas aller dans ta façon de faire.

Tout d'abord il faut que ton ennemi dispose de 3 sprites tous tournés vers la droite:
un sprite à l’arrêt
un sprite en train de courir
un sprite pour le saut

dans l'event create initialises ces variables (amuses toi à modifier les valeurs):

gravity_direction=270
gravite=2
image_speed=0
D=1 //dirrection (1=droite, 0=gauche)
vg=0 // vitesse gauche
vd=0 // vitesse droite
acc=0.4 //acceleation
dec=0.6 //deceleration
vm=3 // vitesse max
distance_separation=30 //separation entre l'ennemi et le player
puissance_saut=12

dans l'event de collision avec l'objet solide (le sol, le mur)

vspeed=0
move_contact_solid(270,10)

et dans le step (je te laisse le soin de remplacer le nom des sprites et des objets):

Code:
if !position_meeting(x,y,zone_action)
{
if path_ok==1
{
path_ok=0
path_start(path0,2.5,1,0)
}}
else


{

path_ok=1
path_end()

if place_free(x,y+1) // si la place est libre en y+1 (un pixel vers le bas)
{gravity=gravite} // alors la gravité = gravite
else
{gravity=0} //sinon gravité = 0

if D==1 // si D =1, quand D=1 l'ennemi est tourné vers la droite
{
image_xscale=1;image_speed=(vd/12)+0.05  
for (i=0;i<vm;i+=1) // on lance une boucle pour le déplacement qui teste pixel par pixel si la place est libre
{
if place_free(x+1,y)
{x+=vd/vm}// on avance de "vd" divésé par le nombre d'itération pour chaque itérations
}
}

if D==0 // même chose mais pour la gauche
{
image_xscale=-1;image_speed=(vg/12)+0.05 // quand image_xscale = -1 le sprite s'inversse sur son axe donc l'ennemi est tourné vers la gauche
for (i=0;i<vm;i+=1)
{
if place_free(x-1,y)
{x-=vg/vm}
}}

// IA ennemi
if x+distance_separation<obj_player.x // si sa position x + la distance de separation est plus petit que x de obj_player
{vd+=acc} // alors vitesse droite s'augemente de accélération
else{vd-=dec} // sinon la vitesse droite se réduit de deceleration
if x<obj_player.x // même teste mais sans prendre en compte la distance de séparation
{D=1}// voir plus haut dans le code pour savoir se qu'il se passe si D est = à 1
if x-distance_separation>obj_player.x // même chose mais pour la gauche
{vg+=acc}
else{vg-=dec}
if x>obj_player.x
{D=0}


// ici on va déterminer les limites des variable vd et vg
if vd>vm{vd=vm} // si vd est plus grand que vm (4) alors vd=vm. Ainsi vd ne dépassera jamais 4
if vg>vm{vg=vm}
if vd<0{vd=0} // si vd est plus petit que 0 alors vd=0 donc vd ne serra jamais plus petit que 0
if vg<0{vg=0}

// saut
if !place_free(x,y+1) // si la place n'est pas libre en y+1 (un pixel vers le bas)
{
if D==1 // si la direction est vers la droite
{
if not place_free(x+5,y) // si la place n'est pas libre en x+5
{vspeed=-puissance_saut;vd=vm} // alors vspeed qui gère la vitesse vertical = -12 et on donne une petite impultion vers l'avant grace à vd=vm pour que l'objet ne saute pas sur place
}
if D==0 // même chose mais pour la gauche
{
if not place_free(x-5,y)
{vspeed=-puissance_saut;vg=vm}
}
if vg<=0 && vd<=0 // toujours dans la condition "if !place_free(x,y+1)" on teste si vg et vd ne sont pas plus petit ou = à 0
{sprite_index=spr_stop} // si c'est le cas on utilise le sprite spr_stop
if vg>0 || vd>0 // si vd ou vg sont plus grand que 0 ( "||" signifi "ou" peut s'écrire aussi "or" )
{sprite_index=spr_run} // si c'est le cas on utilise le sprite spr_run
}
else {sprite_index=spr_jump} // sinon ( pour la condition "if !place_free(x,y+1)" ) on utilise le sprite spr_jump
// donc quand la place est libre en y+1 le perso a le sprite en train de sauter même quand il tombe.

if !place_free(x-1,y)||!place_free(x+1,y)&& !place_free(x,y+1) // si la place est libre en x-1 ou en x+1 et que la place n'est pas libre en y+1
// donc si l'ennemi est contre un mur et qu'il est sur le sol alors le sprite= spr_stop pour éviter que l'ennemi continu à courir alors qu'il n'avance plus
{sprite_index=spr_stop}

}




D’ailleurs avec quelques modification tu peux très bien utiliser ce code pour ton perso.
J'ai laisser dans le code le path mais si tu veux mon avis c'est pas une bonne idée il vaut mieux créer son chemin de déplacement en prenant en compte la physique surtout pour un jeu de plateforme.

_________________
Spoiler:
 
Revenir en haut Aller en bas
Skymar
Débutant
avatar

Messages : 28
Localisation : Ile-De-France
Projet Actuel : Mini-jeu "Gurdil" pour concours a Isart Digital

MessageSujet: Re: Chute et saut ennemi   Ven 27 Déc 2013 - 11:53

Merci tout marche parfaitement a un détail pres ,quand l'ennemi suit son path tranquillement ,il reste tourner dans la meme direction,toujours regard vers la droite meme si il va a gauche.

_________________
La vraie question,ce n'est pas "Pourquoi?" .C'est "Pourquoi pas ?"
Revenir en haut Aller en bas
Mass
*Excellent utilisateur*
avatar

Messages : 3324
Localisation : Dans une canonnière wookie.
Projet Actuel :
Wyvup
SpaceShift
Centauri-France


MessageSujet: Re: Chute et saut ennemi   Ven 27 Déc 2013 - 12:03

Adapte ton code, et ajoute simplement une condition qui fait qu'il ne bouge pas latéralement si il est en train de chuter  happy1 
Revenir en haut Aller en bas
http://madmass.mype.fr/CBNA/
chopsuey
Utilisateur confirmé: Rang ***
avatar

Messages : 523
Localisation : saint etienne
Projet Actuel : All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
...

MessageSujet: Re: Chute et saut ennemi   Ven 27 Déc 2013 - 12:41

Est ce que ton path est complexe ? par ce que si c'est juste pour faire gauche droite gauche droite ça sert à rien d'utiliser un path.

_________________
Spoiler:
 
Revenir en haut Aller en bas
Skymar
Débutant
avatar

Messages : 28
Localisation : Ile-De-France
Projet Actuel : Mini-jeu "Gurdil" pour concours a Isart Digital

MessageSujet: Re: Chute et saut ennemi   Ven 27 Déc 2013 - 12:55

Non en effet ,il ne va que de gauche a droite et vice versa.

_________________
La vraie question,ce n'est pas "Pourquoi?" .C'est "Pourquoi pas ?"
Revenir en haut Aller en bas
chopsuey
Utilisateur confirmé: Rang ***
avatar

Messages : 523
Localisation : saint etienne
Projet Actuel : All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
...

MessageSujet: Re: Chute et saut ennemi   Ven 27 Déc 2013 - 13:24

Essayes ça :

Code:

     if place_free(x,y+1)
   {gravity=gravite}
   else
    {gravity=0}

    if D==1
   {
    image_xscale=1;image_speed=(vd/12)+0.05  
    for (i=0;i<vm;i+=1)
   {
    if place_free(x+1,y)
    {x+=vd/vm}
    }
    }

    if D==0
   {
    image_xscale=-1;image_speed=(vg/12)+0.05
   for (i=0;i<vm;i+=1)
    {
    if place_free(x-1,y)
    {x-=vg/vm}
    }}
  
   if !place_free(x,y+1)
   {
    if D==1
   {
    if not place_free(x+5,y)
    {vspeed=-puissance_saut;vd=vm}
   }
    if D==0
   {
    if not place_free(x-5,y)
    {vspeed=-puissance_saut;vg=vm}
    }
    if vg<=0 && vd<=0
   {sprite_index=spr_stop}
   if vg>0 || vd>0
   {sprite_index=spr_run}
    }
    else {sprite_index=spr_jump}
   

    if !place_free(x-1,y)||!place_free(x+1,y)&& !place_free(x,y+1)
   {sprite_index=spr_stop}

    if vd>vm{vd=vm}
   if vg>vm{vg=vm}
    if vd<0{vd=0}
   if vg<0{vg=0}
    
    if !position_meeting(x,y,zone_action)
    {
    if D==1{vd+=acc}
    else {vd-=dec}
    if D==0{vg+=acc}
    else{vg-=dec}
    
    if path_ok==1
    {
    path_ok=0
    D+=1
    if D>1{D=0}
    alarm[0]=25
    }
    }
    else
    {
    path_ok=1
  
    if x+distance_separation<obj_player.x
   {vd+=acc}
   else{vd-=dec}
   if x<obj_player.x
   {D=1}
    if x-distance_separation>obj_player.x
   {vg+=acc}
    else{vg-=dec}
    if x>obj_player.x
    {D=0}
    }

       

Et dans l'event alarme0 tu mets path_ok=1
Si tu veux modifier la distance que parcourt l'ennemi modifies la valeur de l'alarme.

_________________
Spoiler:
 
Revenir en haut Aller en bas
Skymar
Débutant
avatar

Messages : 28
Localisation : Ile-De-France
Projet Actuel : Mini-jeu "Gurdil" pour concours a Isart Digital

MessageSujet: Re: Chute et saut ennemi   Ven 27 Déc 2013 - 14:45

Impeccable tout marche ,merci encore  awesome 

_________________
La vraie question,ce n'est pas "Pourquoi?" .C'est "Pourquoi pas ?"
Revenir en haut Aller en bas
chopsuey
Utilisateur confirmé: Rang ***
avatar

Messages : 523
Localisation : saint etienne
Projet Actuel : All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
...

MessageSujet: Re: Chute et saut ennemi   Ven 27 Déc 2013 - 14:51

Petite rectification du code:

Code:
    if vd>vm{vd=vm}
    if vg>vm{vg=vm}
    if vd<0{vd=0}
    if vg<0{vg=0}
   
    if place_free(x,y+1)
    {gravity=gravite}
    else
    {gravity=0}

    if D==1
    {
    image_xscale=1;image_speed=(vd/12)+0.05 
    for (i=0;i<vm;i+=1)
    {
    if place_free(x+1,y)
    {x+=vd/vm}
    }
    }

    if D==0
    {
    image_xscale=-1;image_speed=(vg/12)+0.05
    for (i=0;i<vm;i+=1)
    {
    if place_free(x-1,y)
    {x-=vg/vm}
    }}
 
    if !place_free(x,y+1)
    {
    if D==1
    {
    if not place_free(x+5,y)
    {vspeed=-puissance_saut;vd=vm}
    }
    if D==0
    {
    if not place_free(x-5,y)
    {vspeed=-puissance_saut;vg=vm}
    }
    if vg<=0 && vd<=0
    {sprite_index=spr_stop}
    if vg>0 || vd>0
    {sprite_index=spr_run}
    }
    else {sprite_index=spr_jump}
   

    if !place_free(x-1,y)||!place_free(x+1,y)&& !place_free(x,y+1)
    {sprite_index=spr_stop}

    if !position_meeting(x,y,zone_action)
    {
    if D==1{vd+=acc}
    else {vd-=dec}
    if D==0{vg+=acc}
    else{vg-=dec}
   
    if path_ok==1
    {
    path_ok=0
    D+=1
    if D>1{D=0}
    alarm[0]=25
    }
    }
    else
    {
    path_ok=1
 
    if x+distance_separation<obj_player.x
    {vd+=acc}
    else{vd-=dec}
    if x<obj_player.x
    {D=1}
    if x-distance_separation>obj_player.x
    {vg+=acc}
    else{vg-=dec}
    if x>obj_player.x
    {D=0}
    }

   


_________________
Spoiler:
 
Revenir en haut Aller en bas
Skymar
Débutant
avatar

Messages : 28
Localisation : Ile-De-France
Projet Actuel : Mini-jeu "Gurdil" pour concours a Isart Digital

MessageSujet: Re: Chute et saut ennemi   Mer 1 Jan 2014 - 4:14

Merci mais ca marche deja parfaitement ,que va m'apporter cette rectification ?

_________________
La vraie question,ce n'est pas "Pourquoi?" .C'est "Pourquoi pas ?"
Revenir en haut Aller en bas
chopsuey
Utilisateur confirmé: Rang ***
avatar

Messages : 523
Localisation : saint etienne
Projet Actuel : All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
...

MessageSujet: Re: Chute et saut ennemi   Sam 4 Jan 2014 - 23:31

C'est juste que quand j'ai testé avec mon 1er code l'ennemi recul tout seul quand il est sensé être à l’arrêt. C'est dû à l'ordre d’exécution dans mon code.

_________________
Spoiler:
 
Revenir en haut Aller en bas
Contenu sponsorisé




MessageSujet: Re: Chute et saut ennemi   

Revenir en haut Aller en bas
 
Chute et saut ennemi
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» chute libre
» La chute de feu, une vision très rare
» Italie: Chute du gouvernement Prodi...
» Un saut opérationnel.
» Chute d'un avion dans les Andes: aucun espoir de retrouver des survivants

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Entraide débutants-
Sauter vers: