| [Résolu] Sprite de saut affiché en priorité | |
|
|
Auteur | Message |
---|
Invité Invité
| Sujet: [Résolu] Sprite de saut affiché en priorité Dim 18 Sep 2011 - 15:33 | |
| Bonjour ! Je voulais me débrouiller seul mais là j'ai tout essayé. Je vais tenter de vous expliquer clairement mon problème. J'ai deux sprites : - 1 sprite de Marche
- 1 sprite de Saut
Mon object peut marcher et sauter. Voici son code (pas en entier) contenu dans un Step : // Si on va à gaucheif keyboard_check( vk_left) || keyboard_check( ord('A')) { if place_free( x-4, y) { sprite_index = sprJoueur1Marche; image_speed = 0.6; x -= 4; }}// Et si on va à droiteelse if keyboard_check( vk_right) || keyboard_check( ord('D')) { if place_free( x+4, y) { sprite_index = sprJoueur1Marche; image_speed = 0.6; x += 4; }}// Et si on sauteelse if vspeed < 0 { sprite_index = sprJoueur1Saute; // Image du sprite quand il saute image_index = 0; }// Et si on retombeelse if vspeed > 0 { sprite_index = sprJoueur1Saute; // Image du sprite quand il retombe image_index = 1; }// Sinon, on ne bouge paselse{ sprite_index = sprJoueur1Marche; image_index = 0; image_speed = 0; }Le problème : Le sprite sprJoueur1Marche ne s'affiche que quand il saute sur place. Si je presse la touche Haut (uniquement), tout va bien. Si j'appuies sur la touche Haut et Gauche ou Droite, c'est le sprite sprJoueur1Marche qui s'affiche pendant le saut. J'espère que vous avez bien compris mon problème et j'espère que vous pourrez m'aider. Merci par avance !
Dernière édition par Fresh le Dim 18 Sep 2011 - 21:11, édité 1 fois |
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: [Résolu] Sprite de saut affiché en priorité Dim 18 Sep 2011 - 15:39 | |
| Ben devrais y avoir pas mal de solutions a ton problème. Perso j'utiliserais une variable d'état et je ferais les anims en fonction. Sinon tu peut toujours faire : if keyboard_check(vk_left) || keyboard_check(ord('A')) { if place_free(x-4,y) { // si touche le sol if(!place_free(x, y+1)) { sprite_index = sprJoueur1Marche image_speed = 0.6; } x -= 4; } } histoire de lancer l'anim de déplacement que quand le perso est au sol. |
|
| |
Termite Utilisateur confirmé: Rang ****
Messages : 1005 Localisation : Dans ta charpente ! Projet Actuel : RayEngine 5.0
| Sujet: Re: [Résolu] Sprite de saut affiché en priorité Dim 18 Sep 2011 - 15:43 | |
| Hm, perso j'aurais fait comme ça : if (keyboard_check(vk_left)) { dir=-1; } if (keyboard_check(vk_right)) { dir=1; } kmove = keyboard_check(vk_left) ^keyboard_check(vk_right) // un "^" histoire que kmove soit faux si on appuie sur les deux touches, sinon tu peux remplacer par un "||" normal xspeed = dir*kmove*vitesse; if (place_free(x+dir*xspeed,y) x+=xspeed; Ensuite pour les sprites : if (vspeed!=0) { sprite_index = sprJoueur1Saute; image_speed=0.5; } elseif (kmove) { sprite_index = sprJoueur1Marche image_speed=0.5; } else { sprite_index = sprJoueur1Marche image_speed=0; } Dis-moi si ça marche |
|
| |
Oculus Utilisateur confirmé: Rang *****
Messages : 1688
| Sujet: Re: [Résolu] Sprite de saut affiché en priorité Dim 18 Sep 2011 - 15:45 | |
| Alors pour faire vite je te conseille de faire des colisions aux pixels près ça sera beaucoup plus simple et surtout propre. Enfin ton problème facilement à coup de place_free. - Code:
-
if (!place_free(x,y+5))//(je mets 5 mais c'est le gros des moteurs comme ça les collisions sont foireuse) sprite_index=SprJump; else if (x!=xprevious) sprite_index=SprWalk; else if (x==xprevious && y==yprevious) sprite_index=SprIdle;
Maintenant ton moteur en version propre : - Code:
-
//gravite repeat(abs(vsp)) { if( !place_free(x, y + sign(vsp)) ) { y += sign(vsp); } else vsp= 0; }
if keyboard_check(vk_left) || keyboard_check(ord('A')) { repeat(4) { if place_free(x-1,y) x -= 1; } }
// Et si on va à droite else if keyboard_check(vk_right) || keyboard_check(ord('D)) { repeat(4) { if place_free(x+1,y) x+= 1; } }
// Et si on saute if keyboard_check_pressed(vk_up) || keyboard_check_pressed(ord('W)) && not place_free(x,y+1) { jump=10 }
if keyboard_check(vk_up) || keyboard_check(ord('W)) { jump-=1 vsp=-5 }
if keyboard_check(vk_right) image_xscale=1 else if keyboard_check(vk_left) image_xscale=-1
//DRAW // Et si on saute if vsp < 0 && place_free(x,y+1) { sprite_index = sprJoueur1Saute; // Image du sprite quand il saute image_index = 0; }
// Et si on retombe else if vsp > 0 && place_free(x,y+1) { sprite_index = sprJoueur1Saute; // Image du sprite quand il retombe image_index = 1; }
else if (!place_free(x,y+1) && x!=xprevious) { sprite_index = sprJoueur1Marche; image_index = 0; image_speed = 0; }
// Sinon, on ne bouge pas else { sprite_index = sprJoueur1Marche; image_index = 0; image_speed = 0; } Comme ça on me reprochera pas de spawmé des templates. Ah et puis se moteur est autonome tu coche solid dans les objets solide et puis voilà, par contre j'ai pas testé mais il y a pas de raison que ça ne marche pas. |
|
| |
D-z Utilisateur confirmé: Rang *****
Messages : 1611 Localisation : Montpellier
| Sujet: Re: [Résolu] Sprite de saut affiché en priorité Dim 18 Sep 2011 - 16:34 | |
| Un truc très pratique que j'utilise, c'est faire en début de step un truc du genre : - Code:
-
on_ground=place_meeting(x,y+1,obj_ground) on_ladder=position_meeting(x,y,obj_ladder) in_water=place_meeting(x,y,obj_water) Comme ça tu peux utiliser l'état de ton objet pour déterminer son comportement : - Code:
-
if keyboard_check(vk_right) { if on_ground sprite_index=spr_marche else if on_ladder sprite_index=spr_grimpedroite else if in_water sprite_index=spr_nagedroite
if place_free(x+4,y) x+=4 } |
|
| |
Oculus Utilisateur confirmé: Rang *****
Messages : 1688
| Sujet: Re: [Résolu] Sprite de saut affiché en priorité Dim 18 Sep 2011 - 17:25 | |
| |
|
| |
Invité Invité
| Sujet: Re: [Résolu] Sprite de saut affiché en priorité Dim 18 Sep 2011 - 18:49 | |
| Onilink > Je ne vois pas ce qu'est une variable d'état et j'ai essayé ton bout de code mais ça ne fonctionne pas.
Termite, Jbg & D-z > C'est bien gentil de proposer vos scripts mais je ne les comprends pas et je ne veux pas utiliser de scripts incompréhensibles. Vos codes sont sûrement bien mieux fignolés, certes, mais je suis sûr qu'avec mon code actuel de noob, on peut quand même faire ce que je demande. Mais je vous remercie de m'avoir répondu, c'est bien sympa ! |
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: [Résolu] Sprite de saut affiché en priorité Dim 18 Sep 2011 - 19:14 | |
| Ben en gros une variable d'état c'est une variable qui te permettra de savoir quelle action le joueur effectue. C'est assez semblable a la technique de Deezee, sauf que la t'utilise une variable et des constantes. Pour ce qui est de résoudre ton problème je verrais un algo du genre : Si je vais a gauche { déplacement a gauche Si je suis au sol { animations } } sinon Si je vais a droite { comme au dessus pour la droite } Sinon Si je suis en plein saut { Si ma vitesse est positive animation sinon autre animation } Sinon animation du joueur qui ne bouge pas Y a évidement mieux mais la au moins c'est très simple, et du même genre que ce que tu utilise. Si tu a toujours des soucis je pourrais te faire un gm6 simpliste |
|
| |
Oculus Utilisateur confirmé: Rang *****
Messages : 1688
| Sujet: Re: [Résolu] Sprite de saut affiché en priorité Dim 18 Sep 2011 - 19:58 | |
|
Dernière édition par jbg77 le Dim 18 Sep 2011 - 20:06, édité 1 fois |
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: [Résolu] Sprite de saut affiché en priorité Dim 18 Sep 2011 - 20:04 | |
| - jbg77 a écrit:
- Qu'est-ce que tu ne comprend pas ?
J'ai exemple hyper commenté ici C'est parce que toi parle trop bien la france |
|
| |
Oculus Utilisateur confirmé: Rang *****
Messages : 1688
| Sujet: Re: [Résolu] Sprite de saut affiché en priorité Dim 18 Sep 2011 - 20:08 | |
| Les touches du claviers sont trop petites pour nos pattes de chat. |
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: [Résolu] Sprite de saut affiché en priorité Dim 18 Sep 2011 - 20:29 | |
| Pas d'excuses, la touche retour arrière fait 2 touches de large :p |
|
| |
-Coco- Utilisateur confirmé: Rang ***
Messages : 545 Localisation : Grenoble - Montpellier Projet Actuel : Orion VII - 0%
| Sujet: Re: [Résolu] Sprite de saut affiché en priorité Dim 18 Sep 2011 - 20:38 | |
| Cela affiche le sprite du jouer qui marche car tu as mis un else if.
En effet, lorsque tu appuieras sur droite ou gauche, il va faire la condition droite ou gauche (c'est à dire afficher le sprite du joueur qui marche), puis il va ignorer toutes les conditions suivantes (à cause du else if), que vspeed ait une valeur ou non. Le problème vient donc du else if.
Donc si tu veux faire en sorte que cela marche je pense qu'il vaut mieux que tu fasses des blocs de if tout simples bien séparés, ou au moins entre les déplacements et le saut. Si après ça ça ne marche pas, je ne vois pas d'où pourrait venir le problème. |
|
| |
Invité Invité
| Sujet: Re: [Résolu] Sprite de saut affiché en priorité Dim 18 Sep 2011 - 21:11 | |
| Merciiii Coco, c'était bien ça. *.* (Merci aux autres aussi hein, mais il m'a répondu directement en se basant sur mon code et c'est plus clair pour moi).
Code fonctionnel :
// Si on va à gauche if keyboard_check(vk_left) || keyboard_check(ord('A')) { if place_free(x-4,y) { sprite_index = sprJoueur1Marche; image_speed = 0.6; x -= 4; } }
// Et si on va à droite else if keyboard_check(vk_right) || keyboard_check(ord('D')) { if place_free(x+4,y) { sprite_index = sprJoueur1Marche; image_speed = 0.6; x += 4; } }
// Sinon, on ne bouge pas else { sprite_index = sprJoueur1Marche; image_index = 0; image_speed = 0; }
// Si on saute if vspeed < 0 { sprite_index = sprJoueur1Saute; image_index = 0; }
// Et si on retombe else if vspeed > 0 { sprite_index = sprJoueur1Saute; image_index = 1; } |
|
| |
Contenu sponsorisé
| Sujet: Re: [Résolu] Sprite de saut affiché en priorité | |
| |
|
| |
| [Résolu] Sprite de saut affiché en priorité | |
|