AccueilAccueil  FAQFAQ  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  
Le deal à ne pas rater :
Nike : Jusqu’à 50% sur les articles de fin de saison
Voir le deal
-15%
Le deal à ne pas rater :
(Adhérents) LEGO® Icons 10318 Le Concorde
169.99 € 199.99 €
Voir le deal

 

 [Résolu] Sprite de saut affiché en priorité

Aller en bas 
5 participants
AuteurMessage
Invité
Invité




[Résolu] Sprite de saut affiché en priorité Empty
MessageSujet: [Résolu] Sprite de saut affiché en priorité   [Résolu] Sprite de saut affiché en priorité EmptyDim 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 à 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;
}
}

// Et si on saute
else if vspeed < 0
{
sprite_index = sprJoueur1Saute; // Image du sprite quand il saute
image_index = 0;
}

// Et si on retombe
else if vspeed > 0
{
sprite_index = sprJoueur1Saute; // Image du sprite quand il retombe
image_index = 1;
}

// Sinon, on ne bouge pas
else
{
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
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9178
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

[Résolu] Sprite de saut affiché en priorité Empty
MessageSujet: Re: [Résolu] Sprite de saut affiché en priorité   [Résolu] Sprite de saut affiché en priorité EmptyDim 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.

_________________
[Résolu] Sprite de saut affiché en priorité Runningpotato1[Résolu] Sprite de saut affiché en priorité TvF6GED [Résolu] Sprite de saut affiché en priorité MdetltS
Revenir en haut Aller en bas
Termite
Utilisateur confirmé: Rang ****
Termite


Messages : 1005
Localisation : Dans ta charpente !
Projet Actuel : RayEngine 5.0

[Résolu] Sprite de saut affiché en priorité Empty
MessageSujet: Re: [Résolu] Sprite de saut affiché en priorité   [Résolu] Sprite de saut affiché en priorité EmptyDim 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 gnii

_________________
Because these are not the words of God, the same God that burnt the knowing.
Revenir en haut Aller en bas
Oculus
Utilisateur confirmé: Rang *****



Messages : 1688

[Résolu] Sprite de saut affiché en priorité Empty
MessageSujet: Re: [Résolu] Sprite de saut affiché en priorité   [Résolu] Sprite de saut affiché en priorité EmptyDim 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.
Revenir en haut Aller en bas
D-z
Utilisateur confirmé: Rang *****
D-z


Messages : 1611
Localisation : Montpellier

[Résolu] Sprite de saut affiché en priorité Empty
MessageSujet: Re: [Résolu] Sprite de saut affiché en priorité   [Résolu] Sprite de saut affiché en priorité EmptyDim 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
}

_________________
 
Home is not a place, it's a feeling.
Revenir en haut Aller en bas
Oculus
Utilisateur confirmé: Rang *****



Messages : 1688

[Résolu] Sprite de saut affiché en priorité Empty
MessageSujet: Re: [Résolu] Sprite de saut affiché en priorité   [Résolu] Sprite de saut affiché en priorité EmptyDim 18 Sep 2011 - 17:25

Ah ouais pas mal.
Revenir en haut Aller en bas
Invité
Invité




[Résolu] Sprite de saut affiché en priorité Empty
MessageSujet: Re: [Résolu] Sprite de saut affiché en priorité   [Résolu] Sprite de saut affiché en priorité EmptyDim 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 !
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9178
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

[Résolu] Sprite de saut affiché en priorité Empty
MessageSujet: Re: [Résolu] Sprite de saut affiché en priorité   [Résolu] Sprite de saut affiché en priorité EmptyDim 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 Smile

_________________
[Résolu] Sprite de saut affiché en priorité Runningpotato1[Résolu] Sprite de saut affiché en priorité TvF6GED [Résolu] Sprite de saut affiché en priorité MdetltS
Revenir en haut Aller en bas
Oculus
Utilisateur confirmé: Rang *****



Messages : 1688

[Résolu] Sprite de saut affiché en priorité Empty
MessageSujet: Re: [Résolu] Sprite de saut affiché en priorité   [Résolu] Sprite de saut affiché en priorité EmptyDim 18 Sep 2011 - 19:58

Qu'est-ce que tu ne comprends pas ?
J'ai un exemple hyper commenté ici :
http://www.host-a.net/u/jbg77/%5BGmk%5DVery%20Simple%20platform%20engine%20de%20jbg77.gmk


Dernière édition par jbg77 le Dim 18 Sep 2011 - 20:06, édité 1 fois
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9178
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

[Résolu] Sprite de saut affiché en priorité Empty
MessageSujet: Re: [Résolu] Sprite de saut affiché en priorité   [Résolu] Sprite de saut affiché en priorité EmptyDim 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 Yum!

_________________
[Résolu] Sprite de saut affiché en priorité Runningpotato1[Résolu] Sprite de saut affiché en priorité TvF6GED [Résolu] Sprite de saut affiché en priorité MdetltS
Revenir en haut Aller en bas
Oculus
Utilisateur confirmé: Rang *****



Messages : 1688

[Résolu] Sprite de saut affiché en priorité Empty
MessageSujet: Re: [Résolu] Sprite de saut affiché en priorité   [Résolu] Sprite de saut affiché en priorité EmptyDim 18 Sep 2011 - 20:08

Les touches du claviers sont trop petites pour nos pattes de chat. Yum!
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9178
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

[Résolu] Sprite de saut affiché en priorité Empty
MessageSujet: Re: [Résolu] Sprite de saut affiché en priorité   [Résolu] Sprite de saut affiché en priorité EmptyDim 18 Sep 2011 - 20:29

Pas d'excuses, la touche retour arrière fait 2 touches de large :p

_________________
[Résolu] Sprite de saut affiché en priorité Runningpotato1[Résolu] Sprite de saut affiché en priorité TvF6GED [Résolu] Sprite de saut affiché en priorité MdetltS
Revenir en haut Aller en bas
-Coco-
Utilisateur confirmé: Rang ***
-Coco-


Messages : 545
Localisation : Grenoble - Montpellier
Projet Actuel : Orion VII - 0%

[Résolu] Sprite de saut affiché en priorité Empty
MessageSujet: Re: [Résolu] Sprite de saut affiché en priorité   [Résolu] Sprite de saut affiché en priorité EmptyDim 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.

_________________
Oh, snap.
Revenir en haut Aller en bas
Invité
Invité




[Résolu] Sprite de saut affiché en priorité Empty
MessageSujet: Re: [Résolu] Sprite de saut affiché en priorité   [Résolu] Sprite de saut affiché en priorité EmptyDim 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;
}
Revenir en haut Aller en bas
Contenu sponsorisé





[Résolu] Sprite de saut affiché en priorité Empty
MessageSujet: Re: [Résolu] Sprite de saut affiché en priorité   [Résolu] Sprite de saut affiché en priorité Empty

Revenir en haut Aller en bas
 
[Résolu] Sprite de saut affiché en priorité
Revenir en haut 
Page 1 sur 1

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: