AccueilAccueil  FAQFAQ  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  
Le Deal du moment : -40%
-40% sur le Pack Gaming Mario PDP Manette filaire + ...
Voir le deal
29.99 €

 

 PacMan

Aller en bas 
4 participants
AuteurMessage
Shrom
Débutant



Messages : 18

PacMan Empty
MessageSujet: PacMan   PacMan EmptySam 12 Nov 2011 - 13:49

Bonjour tous le monde,

Je suis nouveau sous GameMaker, et je voudrais me faire la main sur cet outil en créant un PacMan en GML

j'ai réussi a créer mes déplacement, mais lorsque je rentre en collsion avec mon mur, je passe au travers... ( ce n'est pas très pratique Smile)


voici mon code :


Code:
//déclaration des variables servant à faire bloquer PacMan contre les mur

//Si pacman de déplace vers la droite

if argument0==1
{
    if (place_free(x+32,y) && place_snapped(32,32))           
        {             
            direction = 0;
            speed = 2;
            sprite_index = PacMan_R_spr;
            image_speed = 1/4;
        }
}   

//Si pacman de déplace vers la gauche
if argument1==1
{
    if (place_free(x-32,y) && place_snapped(32,32))           
        {             
            direction = 180;
            speed = 2;
            sprite_index = PacMan_L_spr;
            image_speed = 1/4;
        }
}

//Si pacman de déplace vers le haut
if argument2==1
{
    if (place_free(x,y-32) && place_snapped(32,32))           
        {             
            direction = 90;
            speed = 2;
            sprite_index = PacMan_H_spr;
            image_speed = 1/4;
        }
}

//Si pacman de déplace vers le bas
if argument3==1
{
    if (place_free(x,y+32) && place_snapped(32,32))           
        {             
            direction = 270;
            speed = 2;
            sprite_index = PacMan_B_spr;
            image_speed = 1/4;
        }
}

pouvez vous m'aider ?


Dernière édition par Shrom le Sam 12 Nov 2011 - 14:04, édité 1 fois
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****
Caly


Messages : 1285
Localisation : Haute Normandie
Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.

PacMan Empty
MessageSujet: Re: PacMan   PacMan EmptySam 12 Nov 2011 - 13:59

Bonjour Shrom,

Le fait vient que tu vérifie ton déplacement par espace de 32pixels de distance, il faut que tu vérifie pixel par pixel le tout dans une boucle.
Voici deux liens qui peuvent t'aider.

https://cbna.forumactif.com/t11343-tutoriel-les-deplacements-en-gml-et-sans-bogues
https://cbna.forumactif.com/t11211-atelier-gml-2-conditions-operateurs-booleens-et-scripts?highlight=atelier
Revenir en haut Aller en bas
Shrom
Débutant



Messages : 18

PacMan Empty
MessageSujet: Re: PacMan   PacMan EmptySam 12 Nov 2011 - 14:07

J'ai déja regardé ces deux liens, mais je ne l'ai comprends pas ?

je veut dire je connais l'histoire des boucles etc..( je suis informaticien), mais je ne comprends pas celles-la :p

peut tu m'aider ?
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****
Caly


Messages : 1285
Localisation : Haute Normandie
Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.

PacMan Empty
MessageSujet: Re: PacMan   PacMan EmptySam 12 Nov 2011 - 14:17

Pourtant les deux tuto sans bien expliqués Oups!

Code:
if (place_free(x+32,y)
Ce bout de code (le tien) signifie : s'il n'y à rien à 32pixels de X.

Ce que tu dois faire c'est : s'il n'y à rien à 1pixel de X; mais tu dois le répéter 32 fois pour que tu te déplace de 32pixels par step.
Pour ce faire tu dois utiliser une boucle, la plus approprié niveau optimisation c'est la boucle for mais tu peut le faire avec une boucle repeat aussi.

Code:
for({var i; i=0}; if( place_free(x+1,y) and i<32); i+=1){
    // ton code ici
}

la boucle for ce résume ainsi:
Citation :
for(1;2;3){4}
1- initialisation: ne s’exécute qu'une seule fois au premier tour de la boucle.
2- condition: tant que la condition est vrai on continue de boucler.
3- action qui s’exécute à chaque fin de tour de boucle.

Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


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

PacMan Empty
MessageSujet: Re: PacMan   PacMan EmptySam 12 Nov 2011 - 14:51

Je dirais juste qu'un pacman c'est du case par case, et donc que la boucle est inutile :p
Par contre il faut bien vérifier a x+1, x-1, etc, et faire gaffe au niveau des masques : il doivent tous avoir la même taille (par exemple 32x32)

_________________
PacMan Runningpotato1PacMan TvF6GED PacMan MdetltS
Revenir en haut Aller en bas
Shrom
Débutant



Messages : 18

PacMan Empty
MessageSujet: Re: PacMan   PacMan EmptySam 12 Nov 2011 - 16:27

Merci de vos réponses !!

Je n'avais pas compris la boucle lool Smile

en revanche mon soucis persiste !!

voici mon code :

Code:


//déclaration des variables servant à faire bloquer PacMan contre les mur
var i
//Si pacman de déplace vers la droite


if argument0==1
{           
    for({var i; i=0}; (place_free(x+1,y) and i<32); i+=1)
        {
            if place_snapped(32,32)
                {
                    direction = 0;
                    speed = 2;
                    sprite_index = PacMan_R_spr;
                    image_speed = 1/4;
                }
        }
}   

//Si pacman de déplace vers la gauche
if argument1==1
{
    for({var i; i=0}; (place_free(x-1,y) and i<32); i+=1)           
        { 
            if place_snapped(32,32)
                {         
                    direction = 180;
                    speed = 2;
                    sprite_index = PacMan_L_spr;
                    image_speed = 1/4;
                }
        }
}

//Si pacman de déplace vers le haut
if argument2==1
{
    for({var i; i=0}; (place_free(x,y-1) and i<32); i+=1)           
        { 
            if place_snapped(32,32)
                {           
                    direction = 90;
                    speed = 2;
                    sprite_index = PacMan_H_spr;
                    image_speed = 1/4;
                }
        }
}

//Si pacman de déplace vers le bas
if argument3==1
{
    for({var i; i=0}; (place_free(x,y+1) and i<32); i+=1)           
        {   
            if place_snapped(32,32)
                {       
                    direction = 270;
                    speed = 2;
                    sprite_index = PacMan_B_spr;
                    image_speed = 1/4;
                }
        }
}


J'ai vérifier les masques, il sont tous identiques, mais ce qui me perturbe ce que a aucun moment dans le script je lui indique l'objet avec lequelle il rentre en collision.

le problème vien peut être de la non ? ou alors la fonction "place_free" prends en compte tous les objets "Solid" avec lesquelle nous rentrons en collision ? ?
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


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

PacMan Empty
MessageSujet: Re: PacMan   PacMan EmptySam 12 Nov 2011 - 16:48

T'as coché solid dans l'objet avec qui tu doit entrer en collision ?
Parce qu'en fait c'est cette variable que regarde place_free.

_________________
PacMan Runningpotato1PacMan TvF6GED PacMan MdetltS
Revenir en haut Aller en bas
Shrom
Débutant



Messages : 18

PacMan Empty
MessageSujet: Re: PacMan   PacMan EmptySam 12 Nov 2011 - 16:52

Et bien oui, j'ai tois objet, mon PacMan, mon mur, et mon obj parent a PacMan, dans lequel j'ai mis l'evenement STEP qui lance mon script de mouvement après avori récupérer la touche enfoncée, et tous mes objet sont "solid".
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


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

PacMan Empty
MessageSujet: Re: PacMan   PacMan EmptySam 12 Nov 2011 - 16:59

Je maintient que la loop for sert a rien pour un déplacement case par case.
C'est même peut être ça qui cause des bugs.

_________________
PacMan Runningpotato1PacMan TvF6GED PacMan MdetltS
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****
Caly


Messages : 1285
Localisation : Haute Normandie
Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.

PacMan Empty
MessageSujet: Re: PacMan   PacMan EmptySam 12 Nov 2011 - 17:04

Citation :
Je maintient que la loop for sert a rien pour un déplacement case par case.
Je suis d'accord.

Citation :
C'est même peut être ça qui cause des bugs.
Beaucoup moins pour le coup.
Je ne vois pas en quoi elle poserait des problèmes.
Revenir en haut Aller en bas
Shrom
Débutant



Messages : 18

PacMan Empty
MessageSujet: Re: PacMan   PacMan EmptySam 12 Nov 2011 - 17:07

Je suis également de ton avis étant donnée que même en l'ayant enlevé cela ne fonctionne toujours pas.

Spoiler:


Ce que je ne comprends pas, c'est que de cette manière je pense bien vérifier en x+1,y-1, etc... mais ce fichu point jaune ne veut pas rentré en collision avec ce mur !!! lol


Dernière édition par Shrom le Sam 12 Nov 2011 - 17:09, édité 1 fois
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


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

PacMan Empty
MessageSujet: Re: PacMan   PacMan EmptySam 12 Nov 2011 - 17:09

Je pense pas que le problème viens de ce script, mais plutot d'ou et comment il est utilisé.
Car la tout a l'air correct a premiere vue.

_________________
PacMan Runningpotato1PacMan TvF6GED PacMan MdetltS
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****
Caly


Messages : 1285
Localisation : Haute Normandie
Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.

PacMan Empty
MessageSujet: Re: PacMan   PacMan EmptySam 12 Nov 2011 - 17:14

Oui c'est ce que j'étai entrain de penser aussi.

Citation :
mon obj parent a PacMan, dans lequel j'ai mis l'evenement STEP qui lance mon script de mouvement après avori récupérer la touche enfoncée

Si tu exécute ton script dans le step du parent c'est le parent qui va se déplacer.
Revenir en haut Aller en bas
Shrom
Débutant



Messages : 18

PacMan Empty
MessageSujet: Re: PacMan   PacMan EmptySam 12 Nov 2011 - 17:16

Alors voici comment est structurer mon programme :

J'ai mes sprites qui contiennent chacun 6 image ( sauf pour le wall ) de 32 par 32 avec le même masque ( 30*30 ) :

-PacMan_R_spr
-PacMan_L_spr
-PacMan_H_spr
-PacMan_B_spr
-Wall_1_spr


j'ai un objet qui correspond a mon sprite "PacMan_R_spr" avec comme parents : l'objet pac_move dans lequelle se trouve ce script :

Spoiler:

et voici le scrpit derrière mv_pacman_scr :

Spoiler:

Tous mes objet son "solid".
Revenir en haut Aller en bas
Shrom
Débutant



Messages : 18

PacMan Empty
MessageSujet: Re: PacMan   PacMan EmptySam 12 Nov 2011 - 17:26

Caly a écrit:
Oui c'est ce que j'étai entrain de penser aussi.

Citation :
mon obj parent a PacMan, dans lequel j'ai mis l'evenement STEP qui lance mon script de mouvement après avori récupérer la touche enfoncée

Si tu exécute ton script dans le step du parent c'est le parent qui va se déplacer.


Ben pourtant mon PacMan se déplace bien...



EDIT :


si je crée une évenement drag&drop, qui dit que entre mon parent et l'objet mur il y a une collision, alors la cela fonctionne !!!!

seulement moi je veut le traduire en code,

une idée ?
Revenir en haut Aller en bas
Shrom
Débutant



Messages : 18

PacMan Empty
MessageSujet: Re: PacMan   PacMan EmptyLun 14 Nov 2011 - 18:19

up ? Smile
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


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

PacMan Empty
MessageSujet: Re: PacMan   PacMan EmptyLun 14 Nov 2011 - 18:25

Je t'aurais bien aidé mais la j'ai le cerveau déco x)
Sinon je pourrais toujours te faire un exemple demain au pire, histoire que tu vois un autre algo et que tu puisse comparer :p

_________________
PacMan Runningpotato1PacMan TvF6GED PacMan MdetltS
Revenir en haut Aller en bas
Shrom
Débutant



Messages : 18

PacMan Empty
MessageSujet: Re: PacMan   PacMan EmptyLun 14 Nov 2011 - 18:28

D'accord merci a toi !!

en tous cas voici ou j'ne suis arriver :

Code:
//Si pacman de déplace vers la droite

if argument0==1
{           
    if (place_free(x+1,y) && place_snapped(32,32))
        {     
            direction = 0;
            speed = 2;
            sprite_index = PacMan_R_spr;
            image_speed = 1/4;
        }
    else
        {
            direction = 0;
            speed = 0;
            sprite_index = PacMan_R_spr;
            image_speed = 1/4; 
        }
}   

//Si pacman de déplace vers la gauche
if argument1==1
{
    if (place_free(x-1,y) && place_snapped(32,32))           
        { 
            direction = 180;
            speed = 2;
            sprite_index = PacMan_L_spr;
            image_speed = 1/4;
        }
    else
        {
            direction = 180;
            speed = 0;
            sprite_index = PacMan_R_spr;
            image_speed = 1/4; 
        }
}

//Si pacman de déplace vers le haut
if argument2==1
{
    if (place_free(x,y+1) && place_snapped(32,32))           
        {           
            direction = 90;
            speed = 2;
            sprite_index = PacMan_H_spr;
            image_speed = 1/4;
        }
    else
        {
            direction = 90;
            speed = 0;
            sprite_index = PacMan_R_spr;
            image_speed = 1/4; 
        }
}

//Si pacman de déplace vers le bas
if argument3==1
{
    if (place_free(x,y-1) && place_snapped(32,32))           
        {             
            direction = 270;
            speed = 2;
            sprite_index = PacMan_B_spr;
            image_speed = 1/4;
        }
    else
        {
            direction = 270;
            speed = 0;
            sprite_index = PacMan_B_spr;
            image_speed = 1/4;
        }
}
Revenir en haut Aller en bas
Shrom
Débutant



Messages : 18

PacMan Empty
MessageSujet: Re: PacMan   PacMan EmptyMar 15 Nov 2011 - 18:15

Bonsoir,

J'ai travailler dessus avec un copain aujourd'hui et voici ou nou sen sommes arrivé :

Code:
en_collision = 0;

PacMan_B_obj.pac_direction=argument0;

//Si pacman se déplace vers la droite
if PacMan_B_obj.pac_direction==1 && place_snapped(32,32)
{           
            if (!place_free(x+32,y))
            {
                    PacMan_B_obj.pac_direction = PacMan_B_obj.old_direction;
                    speed = 0;
                    move_snap(32,32);
                    en_collision = 1;
            }
            else
            {
                direction = 0;
                sprite_index = PacMan_R_spr;
                image_speed = 1/4;
                speed = 2;
                en_collision = 0; 
            } 
}   

//Si pacman de déplace vers la gauche
if PacMan_B_obj.pac_direction==2 && place_snapped(32,32)
{

            if (!place_free(x-32,y))           
            {
                PacMan_B_obj.pac_direction = PacMan_B_obj.old_direction;
                speed = 0;
                move_snap(32,32);
                en_collision = 1;

            }
            else
            {
                direction = 180;
                sprite_index = PacMan_L_spr;
                image_speed = 1/4;
                speed = 2;
                en_collision = 0; 
            }
}

//Si pacman de déplace vers le haut
if PacMan_B_obj.pac_direction==3 && place_snapped(32,32) 
{
           
            if (!place_free(x,y-32))                 
            {
                PacMan_B_obj.pac_direction = PacMan_B_obj.old_direction;
                speed = 0;
                move_snap(32,32);
                en_collision = 1;
            }
            else
            {
                direction = 90;
                sprite_index = PacMan_H_spr;
                image_speed = 1/4;
                speed = 2;
                en_collision = 0; 
            }
}

//Si pacman de déplace vers le bas
if PacMan_B_obj.pac_direction==4 && place_snapped(32,32)
{
           
            if (!place_free(x,y+32))           
            {
                PacMan_B_obj.pac_direction = PacMan_B_obj.old_direction;
                speed = 0;
                move_snap(32,32);
                en_collision = 1;
            }
            else
            {
                speed = 2;
                en_collision = 0;
                direction = 270;
                sprite_index = PacMan_B_spr;
                image_speed = 1/4;               
            }
}

Résultat :

Les collision fonctionne parfaitement !

Seul problème restant :

Lorsque pacman se déplace dans une direction, si je lui demande de se déplace dans une autre et qu'il y a une collision avec un mur a l'endroit demandé, Pacman essaie d'y aller mais il ne peut pas car il y a collision ( logique), mais moi ce que je voudrais, c'est que si il y a un mur a l'endroit demandé, il reste dans la dernière direction.,

Exemple :

PacMan se déplace vers la droite, je lui demande d'aller en haut mais il y a un mur, il ne change pas de direction, il continue vers la droite jusqu'a ce que il puisse le faire.

une idée ?
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


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

PacMan Empty
MessageSujet: Re: PacMan   PacMan EmptyMar 15 Nov 2011 - 18:32

Bon chose promise chose due :

Voici les déplacements d'un jeu type pacman, faits a l'instant (a mettre dans step) pour
des objets de taille 16x16 :
Code:
if(keyboard_check(vk_left) && place_snapped(16, 16)) {
    if(place_free(x-1, y)) {
        direction = 180
        speed = 2
    }
}
else
if(keyboard_check(vk_right) && place_snapped(16, 16)) {
    if(place_free(x+1, y)) {
        direction = 0
        speed = 2
    }
}
if(keyboard_check(vk_up) && place_snapped(16, 16)) {
    if(place_free(x, y-1)) {
        direction = 90
        speed = 2
    }
}
if(keyboard_check(vk_down) && place_snapped(16, 16)) {
    if(place_free(x, y+1)) {
        direction = 270
        speed = 2
    }
}

if(place_snapped(16, 16)
  && !place_free(x + lengthdir_x(1, direction), y + lengthdir_y(1, direction)))
{
    speed = 0
}

Et la version racourcie:
Code:
key[0]=vk_right  key[1]=vk_up
key[2]=vk_left  key[3]=vk_down

for(i=0; i<4; i+=1) {
  if(keyboard_check(key[i]) && place_snapped(16, 16)) {
    lx = lengthdir_x(1, i*90)
    ly = lengthdir_y(1, i*90)
    if(place_free(x+lx, y+ly)) {
        direction = i*90
        speed = 2
        break
    }
  }
}

if(place_snapped(16, 16) && !place_free(x + lengthdir_x(1, direction), y + lengthdir_y(1, direction)))
    speed = 0

Que l'on peu optimiser en divisant en 2 parties (create et step) :
Code:
key[0]=vk_right  key[1]=vk_up
key[2]=vk_left  key[3]=vk_down
for(i=0; i<4; i+=1) {
    lx[i]=lengthdir_x(1, i*90)
    ly[i]=lengthdir_y(1, i*90)
}

Code:
for(i=0; i<4; i+=1) {
  if(keyboard_check(key[i]) && place_snapped(16, 16)) {
    if(place_free(x+lx[i], y+ly[i])) {
        direction = i*90
        speed = 2
        break
    }
  }
}

if(place_snapped(16, 16) && !place_free(x+lx[direction div 90], y + ly[direction div 90]))
    speed = 0

Voila, j'espere que ça pourras t'aider a comprendre comment mieux structurer ton algo Wink

_________________
PacMan Runningpotato1PacMan TvF6GED PacMan MdetltS
Revenir en haut Aller en bas
D-z
Utilisateur confirmé: Rang *****
D-z


Messages : 1611
Localisation : Montpellier

PacMan Empty
MessageSujet: Re: PacMan   PacMan EmptyMar 15 Nov 2011 - 20:37

Oni, c'est moi ou tu viens de déclarer trois tableaux rien que pour les déplacements ? O_o

_________________
 
Home is not a place, it's a feeling.
Revenir en haut Aller en bas
Shrom
Débutant



Messages : 18

PacMan Empty
MessageSujet: Re: PacMan   PacMan EmptyMar 15 Nov 2011 - 20:52

Merci de vos réponses !!!


Voici le script que j'ai créer :


Code:
Coll = 0; //On initialise la variable de collision a 0

// Ce script gère le déplacement de PacMan ainsi que les collision avec les murs
// Paramètre en entrée :
//      argument0 = PacMan_B_obj.PacMan_dir = 1; // On indique que pacman doit se déplacer ( 1=Oui, 0 = Non)
//      argument1 = PacMan_B_obj.PacMan_dir_y = 0; //On indique le nombre de pixel de déplacement Y
//      argument2 = PacMan_B_obj.PacMan_dir_x = 32; //On indique le nombre de pixel de déplacement X
//      argument3 = PacMan_B_obj.PacMan_dir_direction = 0; //On indique la direction a prendre par PacMan ( 0= droite, 180= Gauche, 90= Haut, 270= Bas)
//      argument4 = PacMan_B_obj.PacMan_dir_sprite_index = 1; //On indique le numéro du sprite a prendre ( voir script mv_pacman_scr ).
//      argument5 = Taille de la case de déplacement dans la room

if argument0==1 && place_snapped(argument5,argument5) //Si on demande à PacMan de se déplacer et qu'il est dans une grille de 32*32 alors
{           
    if (!place_free(x+argument2,y+argument1)) // Si il y a collision a la position x+ PacMan_B_obj.PacMan_dir_x et y+ PacMan_B_obj.PacMan_dir_y alors
    {
        speed = 0; //On dit a PacMan de se stopper
        move_snap(argument5,argument5); //On le replace dans une grille de 32*32
        Coll = 1; //On fait en sorte que la valeur de debug des collsion prenne la valeur 1
    }
    else // Sinon il n'y as pas de collision
    {
        direction = argument3; //Sinon on dit a PacMan d'aller dans le direction de PacMan_B_obj.PacMan_dir_direction
            switch(argument4) // En fonction de la valeur de PacMan_B_obj.PacMan_dir_sprite_index, on choisit le sprite
                {
                    case 1: //Mouvement vers la droite
                      sprite_index = PacMan_R_spr;
                      break; // On force la sortie de la boucle, pour qu'il change bien a chaque step
                    case 2: //Mouvement vers la droite
                      sprite_index = PacMan_L_spr;
                      break;
                    case 3: //Mouvement vers la droite
                        sprite_index = PacMan_H_spr;
                        break;
                    case 4: //Mouvement vers la droite
                        sprite_index = PacMan_B_spr;
                        break;
                }
        speed = 2; //On fixe la vite de déplacement de PacMan.
        Coll = 0; //On fait en sorte que la valeur de debug des collsion prenne la valeur 0 
    } 
}


Il me reste 1 seul problème, le fait qu'il tente quand même de se déplacer même si il y a un mur, comme cité ci-dessus:

un exemple :

il se déplace vers la droite, mais lorsque j'appuie sur la flèche haut et qu'il y a un mur PacMan s'arette car il ne peut pas allé en haut, moi je souhaiterai qu'il continue vers la droite si il ne peut pas aller dans la direction demandé...

une idée ?
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


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

PacMan Empty
MessageSujet: Re: PacMan   PacMan EmptyMar 15 Nov 2011 - 21:29

D-z a écrit:
Oni, c'est moi ou tu viens de déclarer trois tableaux rien que pour les déplacements ? O_o

Ben mes tableaux sont legers. Ils font que 4 cases.


>Shroom

Je trouve ton code encore beaucoup trop complexe pour un probleme aussi simple.
Et pourquoi vouloir a tout pris faire une fonction ? T'utilise une boucle et de la trigo et le problème du trop
long code est reglé :p

_________________
PacMan Runningpotato1PacMan TvF6GED PacMan MdetltS
Revenir en haut Aller en bas
D-z
Utilisateur confirmé: Rang *****
D-z


Messages : 1611
Localisation : Montpellier

PacMan Empty
MessageSujet: Re: PacMan   PacMan EmptyMer 16 Nov 2011 - 1:16

onilink_ a écrit:
Ben mes tableaux sont legers. Ils font que 4 cases.

C'était pas GM qui réservait direct les 30 000 cases du tableau en mémoire ? :'

_________________
 
Home is not a place, it's a feeling.
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


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

PacMan Empty
MessageSujet: Re: PacMan   PacMan EmptyMer 16 Nov 2011 - 11:57

Nop je crois pas Razz
Sinon j'aurais utilisé autre chose x)

_________________
PacMan Runningpotato1PacMan TvF6GED PacMan MdetltS
Revenir en haut Aller en bas
D-z
Utilisateur confirmé: Rang *****
D-z


Messages : 1611
Localisation : Montpellier

PacMan Empty
MessageSujet: Re: PacMan   PacMan EmptyMer 16 Nov 2011 - 18:32

Bon, j'ai rien dit alors. Mais c'est quand même utiliser un bazooka pour tuer une mouche :p

_________________
 
Home is not a place, it's a feeling.
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


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

PacMan Empty
MessageSujet: Re: PacMan   PacMan EmptyMer 16 Nov 2011 - 18:58

Jvois pas en quoi. Déjà ça évite de refaire des calculs inutiles, ensuite ça allège le code, et en plus ça le rend plus lisible.
C'est plutot Shrom qui utilise le bazooka :p

_________________
PacMan Runningpotato1PacMan TvF6GED PacMan MdetltS
Revenir en haut Aller en bas
D-z
Utilisateur confirmé: Rang *****
D-z


Messages : 1611
Localisation : Montpellier

PacMan Empty
MessageSujet: Re: PacMan   PacMan EmptyMer 16 Nov 2011 - 21:24

'fin, y'a un juste milieu aussi :p
Perso j'avais pris l'habitude d'utiliser quelques variables key_left, key_up, etc. Mais c'était surtout pour de la plates-formes.

_________________
 
Home is not a place, it's a feeling.
Revenir en haut Aller en bas
Shrom
Débutant



Messages : 18

PacMan Empty
MessageSujet: Re: PacMan   PacMan EmptyJeu 17 Nov 2011 - 19:15

Merci a vous j'ai finalement réussi a faire ca :

Code:



// #############################################
// #### Script de déplacement de Namcap V 1 ####
// ####      Made By Shrom & Doyou        ####
// ####    Special thanks to : onilink_    ####
// #############################################

// Déplacement si il n'y a pas de collision
for(i=0; i<4; i+=1) // Pour i allant de 1 à 4 en fonction de la direction choisit
{
  if(keyboard_check(key[i]) && place_snapped(32, 32)) // Si l'on a appuyé sur une touche et que Namcap est placé dans une grille de 32*32
  {
    if(place_free(x+lx[i], y+ly[i])) // Si il y a de la place entre Namcap et un objet de type "solid" en position X et Y calculé dans l'evénement "Create"
        {
            switch(i) // On fonction de la direction, on choisit le sprite à afficher.
            {
                case 0:
                    sprite_index = Namcap_R_spr // Sprite Droite
                    break
                case 2:
                    sprite_index = Namcap_L_spr // Sprite Gauche
                    break
                case 1:
                    sprite_index = Namcap_H_spr // Sprite Haut
                    break
                case 3:
                    sprite_index = Namcap_B_spr // Sprite Bas
                    break
            }                                       
        direction = i*90 // on va dans la direction choisit en fonction de la touche préssée.
        speed = 2 // On fixe la vitesse
        break // on sort du "If", car il n'y a pas de collision, donc on est sur qu'il ne fasse pas le "IF" suivant
    }
  }
}
//Si il y a une collision, donc si il n'y as pas de place, on arrete Namcap
if(place_snapped(32, 32) && !place_free(x+lx[direction div 90], y + ly[direction div 90]))
    {
        speed = 0
    }
Revenir en haut Aller en bas
Contenu sponsorisé





PacMan Empty
MessageSujet: Re: PacMan   PacMan Empty

Revenir en haut Aller en bas
 
PacMan
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» PacMan 3D
» [Résolu] IA PACMAN
» pacman platformer
» pacman image_angle
» pacman revenge: terminé!!!

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: