AccueilAccueil  FAQFAQ  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  
Le Deal du moment : -39%
Ordinateur portable ASUS Chromebook Vibe CX34 Flip
Voir le deal
399 €

 

 Code pour plates-formes

Aller en bas 
AuteurMessage
Chulien
Utilisateur confirmé: Rang *****
Chulien


Messages : 2232

Code pour plates-formes Empty
MessageSujet: Code pour plates-formes   Code pour plates-formes EmptyJeu 21 Oct 2010 - 19:31

Salut,

je programme un jeu simple de plates-formes, et je ne veux pas utiliser les fonctions incluses dans GM, mais voilà, mon jeu est bourré de bugs (surtout quand on s'encastre en bas à gauche/droite d'un bloc après avoir sauté). sad De plus, je n'ai pas réussi à coder un équivalent à move_to_contact qui permet par exemple, lorsqu'on tombe à grande vitesse, de ne pas s'arrêter à 32 pixels du sol (parce que 32 est la vitesse et que y 32 est occupé) pour ensuite retomber à faible vitesse...

Je me suis dit que la modification des x_speed, y_speed et gravité ne pouvait pas influer sur les problèmes du genre "encastré dans un mur", "passe à travers un mur", et que seul le code modifiant les x et y pouvait causer ces bugs.

Jusque là, est-ce que j'ai raison?

Donc j'utilise tout un tas de scripts pour modifier les vitesses en fonction des place_free, et une fois ceux-ci tous exécutés, j'effectue les déplacements nécessaires. Quelqu'un connaîtrait-il une ou la meilleure façon de procéder ?

step du héros après modification des vitesses
(x et y_speed sont limités à 30)
Code:
y_speed += gravite;

if(place_free(x+x_speed, y+y_speed))
{
    x += x_speed;
    y += y_speed;
}
else if(place_free(x, y+y_speed))
{
    y += y_speed;
   
    for(i=x_speed; i>0; i-=1)
        if(place_free(x+i,y))
        {
            x+=i;
            break; 
        }
}
else if(place_free(x+x_speed, y))
{
    x += x_speed;
       
    for(i=y_speed; i>0; i-=1)
    {
        if(place_free(x,y+i))
        {
            y+=i;
            break;
        }
    }
}
else
{
    for(i=x_speed; i>0; i-=1)
        for(j=y_speed; j>0; j-=1)
            if(place_free(x+i,y+j))
            {
                x += i;
                y += j;
                break; 
            }
}

if(place_free(x,y+1))
    gravite = 0.5;
else
{
    gravite = 0;
    y_speed = 0;
}

edit: j'ai changé le code depuis mon premier post

voilà ce que ça donne: platform_test.exe

Revenir en haut Aller en bas
http://sites.google.com/site/chuliendev
Chulien
Utilisateur confirmé: Rang *****
Chulien


Messages : 2232

Code pour plates-formes Empty
MessageSujet: Re: Code pour plates-formes   Code pour plates-formes EmptyJeu 21 Oct 2010 - 22:53

Finalement je pense que j'utiliserai ce code, qui n'est peut-être pas le meilleur qui soit, mais qui devrait suffire :


Code:
if( place_free(x+x_speed, y+y_speed) )
{
    x += x_speed;
    y += y_speed;
}
else if( place_free(x, y+y_speed) )
{
    x_speed = 0;
    y += y_speed;
}
else if( place_free(x+x_speed, y) )
{
    x += x_speed;
    y_speed = 0;
}
else
{
    x_speed = 0;
    y_speed = 0;
}
Revenir en haut Aller en bas
http://sites.google.com/site/chuliendev
 
Code pour plates-formes
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» [Résolu]Pour arreter une ligne de code?
» code pour niveau
» code pour créé une instance aléatoirement
» [Résolu]quelle est le code pour la touche a
» besoin d'aide pour code (gestion des touches du clavier)

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: