| Chute et saut ennemi | |
|
|
Auteur | Message |
---|
Skymar Débutant
Messages : 28 Localisation : Ile-De-France Projet Actuel : Mini-jeu "Gurdil" pour concours a Isart Digital
| Sujet: Chute et saut ennemi Ven 20 Déc 2013 - 19: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 |
|
| |
Alexandre13660 Bavard
Messages : 98 Projet Actuel : Cerebral Teste
| Sujet: Re: Chute et saut ennemi Ven 20 Déc 2013 - 21:05 | |
| Personnellement, j'utilise des blocs invisibles. Ca prends plus de temps mais chacun sa méthode. |
|
| |
Skymar Débutant
Messages : 28 Localisation : Ile-De-France Projet Actuel : Mini-jeu "Gurdil" pour concours a Isart Digital
| Sujet: Re: Chute et saut ennemi Ven 20 Déc 2013 - 21:18 | |
| Comment ca ? (même si ca m’étonnerais que ca me convienne ) |
|
| |
chopsuey Utilisateur confirmé: Rang ***
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
...
| Sujet: Re: Chute et saut ennemi Ven 20 Déc 2013 - 21: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:
|
|
| |
Skymar Débutant
Messages : 28 Localisation : Ile-De-France Projet Actuel : Mini-jeu "Gurdil" pour concours a Isart Digital
| Sujet: Re: Chute et saut ennemi Ven 27 Déc 2013 - 12: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 ?"
|
|
| |
Mass *Excellent utilisateur*
Messages : 3351 Localisation : Dans une canonnière wookie. Projet Actuel : Monter des trucs et des machins
| Sujet: Re: Chute et saut ennemi Ven 27 Déc 2013 - 13: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 |
|
| |
chopsuey Utilisateur confirmé: Rang ***
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
...
| Sujet: Re: Chute et saut ennemi Ven 27 Déc 2013 - 13: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:
|
|
| |
Skymar Débutant
Messages : 28 Localisation : Ile-De-France Projet Actuel : Mini-jeu "Gurdil" pour concours a Isart Digital
| Sujet: Re: Chute et saut ennemi Ven 27 Déc 2013 - 13: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 ?"
|
|
| |
chopsuey Utilisateur confirmé: Rang ***
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
...
| Sujet: Re: Chute et saut ennemi Ven 27 Déc 2013 - 14: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:
|
|
| |
Skymar Débutant
Messages : 28 Localisation : Ile-De-France Projet Actuel : Mini-jeu "Gurdil" pour concours a Isart Digital
| Sujet: Re: Chute et saut ennemi Ven 27 Déc 2013 - 15:45 | |
| Impeccable tout marche ,merci encore _________________ La vraie question,ce n'est pas "Pourquoi?" .C'est "Pourquoi pas ?"
|
|
| |
chopsuey Utilisateur confirmé: Rang ***
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
...
| Sujet: Re: Chute et saut ennemi Ven 27 Déc 2013 - 15: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:
|
|
| |
Skymar Débutant
Messages : 28 Localisation : Ile-De-France Projet Actuel : Mini-jeu "Gurdil" pour concours a Isart Digital
| Sujet: Re: Chute et saut ennemi Mer 1 Jan 2014 - 5: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 ?"
|
|
| |
chopsuey Utilisateur confirmé: Rang ***
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
...
| Sujet: Re: Chute et saut ennemi Dim 5 Jan 2014 - 0: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:
|
|
| |
Contenu sponsorisé
| Sujet: Re: Chute et saut ennemi | |
| |
|
| |
| Chute et saut ennemi | |
|