begin process at 2012 05 27 09:15:23
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Flash

 > 

Archives

 > 

ActionScript

 > 

Problème de depth


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème de depth

jeudi 6 janvier 2005 à 14:41:34 | Problème de depth

gunwolf

Bonjour à tous et tout d'abord merci de prendre la peine de me lire.
Par plaisir personnel je me suis mis à coder en flash. J'ai suis donc venu ici et j'ai récupérer les sources pour faire un RPG en vue à la zelda. Après avoir a peu près assimiler le truc j'ai entrepris de partir de cette base pour construire la même chose mais en vue isométrique. Je pense que c'est une bonne façon d'apprendre que de partir d'un cas qui marche de le changer un peu tout en se posant des problèmes simples au début plutôt que de partir d'une page vierge.

La situation : J'ai un plateau de jeu en vue isométrique. Dessus j'ai disposé un obstacle et mon personnage.

Mon but : Le personnage doit être visible devant l'obstacle et caché derrière.

Le problème :  Lorsque je change la depth du personnage il est invisible derriere l'obstacle comme prévu mais si je descend plus bas il donne l'impression de s'enfoncer dans le sol jusqu'à sortir du plateau par le dessous.

Mon code :

/********************************************************/
/*    Cette source est la première d'une série de XX    */
/*  Elle explique comment créer un décor paramétrable,  */
/*     pour un jeu basé sur une "grille" genre Zelda    */
/*     libre de droits, elle est créée pour le site     */
/*                  www.FlashKod.com                    */
/*   pour me contacter : chevalier.pegase31@wanadoo.fr  */
/********************************************************/

// Initialisation des variables importantes :
LargMap = 10; /*Défini le nombre de blocs horizontaux de la grille d'ecran*/
HautMap = 22; /*Défini le nombre de blocs verticaux de la grille d'ecran*/
LargTile = 60.0; /*Défini la largeur en pxl d'une case (tile) de la grille*/
HautTile = 30.0; /*Défini la hauteur en pxl d'une case (tile) de la grille*/
LargPerso = 16; /*Défini la largeur en pxl du Personnage*/
HautPerso = 12; /*Défini la hauteur en pxl du Personnage*/
/*Petit détail interessant : LargMap*LargTile = 512 (la largeur de l'animation)*/

CoordPerso = [11,11]; /*Coordonnees du personnage à la création en terme de matrice*/
CoordPerso[0] = (CoordPerso[0]*(LargTile/2)); /*Passage du codage matrice au codage pixel sur X*/
CoordPerso[1] = (CoordPerso[1]*(HautTile/2));/*Passage du codage matrice au codage pixel sur Y*/
Hspeed = 4; /*Vitesse de déplacement Horizontale du perso (en Pxl)*/
Vspeed = 2.2; /*Vitesse de déplacement Verticale du perso (en Pxl)*/
BlocArret = 10;

// Définition de la Map dans un tableau à 2 dimensions :
Map =  [[1,1,1,1,1,1,1,1,1,1],
        [1,1,1,1,1,1,1,1,1,1],
        [1,1,1,1,3,1,1,1,1,1],
        [1,1,1,4,4,1,1,1,1,1],
        [1,1,1,3,3,3,1,1,1,1],
        [1,1,4,4,4,4,1,1,1,1],
        [1,1,3,3,3,3,3,1,1,1],
        [1,4,4,4,4,4,4,1,1,1],
        [1,3,3,3,3,3,3,3,1,1],
        [4,4,4,4,4,4,4,4,1,1],
        [1,3,3,3,3,3,3,3,3,1],
        [1,4,4,4,4,4,4,4,4,1],
        [1,1,3,3,3,3,3,3,3,3],
        [1,1,4,4,4,4,4,4,4,4],
        [1,1,1,3,3,3,3,3,3,3],
        [1,1,1,4,4,5,4,4,4,1],
        [1,1,1,1,3,3,3,3,3,1],
        [1,1,1,1,4,4,4,4,1,1],
        [1,1,1,1,1,3,3,3,1,1],
        [1,1,1,1,1,4,4,1,1,1],
        [1,1,1,1,1,1,3,1,1,1],
        [1,1,1,1,1,1,1,1,1,1],
        [1,1,1,1,1,1,1,1,1,1]];
// Création de la grille permettant d'afficher la carte :
/* On crée une double boucle permettant de créer la grille du jeu */

var Depth = 0;
for (var j=0; j<HautMap; j++) /*début de boucle des ligne*/
    {
        for (var i=0; i<LargMap; i++) /*début de la boucle de colonne*/
            { 
                Decor.Bloc.duplicateMovieClip("Case"+i+"_"+j,Depth);
                if ((j%2)==0)
                {
                     Decor["Case"+i+"_"+j]._x = (i*LargTile);
                }
                else
                {
                    Decor["Case"+i+"_"+j]._x = (i*LargTile)+(LargTile/2);
                }/*et on le place en X suivant la ligne ou l on est*/
                Decor["Case"+i+"_"+j]._y = (j*(HautTile/2)); /*puis on le place sur Y*/
                Depth++;
            } // Fin de boucle des lignes
        Depth++;
    } // Fin de boucle des colonnes

Affich_Map(); /*On affiche la map*/

// Fonction permettant d'afficher la Map sur la Grille
function Affich_Map() {
    /*on réutilise la même double-boucle de la création de la grille pour afficher
    chaque Bloc en référence au n° contenu sur la carte */
    for(var j=0; j<HautMap; j++)  { /*début de boucle des colonnes*/
        for (var i=0; i<LargMap; i++) { /*début de la boucle de lignes*/
            var Frame = Map[j][i]; /*on va chercher la valeur de la case sur MAP*/
            Decor["Case"+i+"_"+j].gotoAndStop(Frame); /*et on envoie le bloc à cette frame*/
        } // Fin de boucle des lignes
    } // Fin de boucle des colonnes
}//Affich_Map

/*****************************************************************/
/********** Partie Gestion du déplacement du personnage **********/
/*****************************************************************/

// Gestionnaire d'évènement Clavier :
this.onEnterFrame = function() { /*à chaque image affichée (soit 30fois/sec)*/
    if(Key.isDown(Key.RIGHT)) { /*détection de la touche HAUT*/
        Xadd = Hspeed;
        Yadd = Vspeed; /*On définis la suppression à Y de la valeur de Speed, soit un déplacement vers le Haut*/
    } else if (Key.isDown(Key.LEFT)) { /*détection de la touche BAS*/
        Xadd = -Hspeed;
        Yadd = -Vspeed; /*On définis l'ajout à Y de la valeur de Speed, soit un déplacement vers le bas*/
    } else if(Key.isDown(Key.UP)) { /*détection de la touche HAUT*/
        Xadd = Hspeed;
        Yadd = -Vspeed; /*On définis la suppression à Y de la valeur de Speed, soit un déplacement vers le Haut*/
    } else if (Key.isDown(Key.DOWN)) { /*détection de la touche BAS*/
        Xadd = -Hspeed;
        Yadd = Vspeed; /*On définis l'ajout à Y de la valeur de Speed, soit un déplacement vers le bas*/
    } else {
        Xadd = 0;
        Yadd = 0; /*Si aucune des touches Verticales ne sont appuyées, on ne crée aucun déplacement en Y*/
    }
    Test_Mouv(); /*On lance la fonction de test de déplacement du perso*/
}

// Fonction permettant de tester le déplacement du personnage
function Test_Mouv () {
    /*On affiche le perso à sa nouvelle place et on met à jour ses coordonnée*/
    CoordPerso[0] += Xadd; /*incrémente la coordonnée X du perso*/
    CoordPerso[1] += Yadd; /*incrémente la coordonnée Y du perso*/
    Decor.Perso._x = CoordPerso[0]; /*affichage du perso en X*/
    Decor.Perso._y = CoordPerso[1]; /*affichage du perso en Y*/
    /*On lui change sa profondeur, correspondant à la ligne actuelle*/
    var x=Math.floor(CoordPerso[0]); //je met la coordonnée en X du personnage dans une variable
    var y=Math.floor(CoordPerso[1]);  // je met celle en Y dans une autre
    var profondeur=Decor.Bloc.Casex_y.getDepth(); //j essaye de recuperer la valeur de la profondeur de la case ou se trouve le personnage
    Decor.Perso.swapDepths(profondeur); // et j en fais la nouvelle valeur pour le personnage
}

Si quelqu'un pouvait m'expliquer ce que j'ai raté et comment me sortir de cela j'apprécierai énormément.
Je n'ai pas de grosses prétentions. Je commence petit, je cherche juste à comprendre et à rajouter les difficultés une par une.
Merci de m'avoir lu. Bonne fin de journée.
jeudi 6 janvier 2005 à 18:32:49 | Re : Problème de depth

pegase31

Membre Club Administrateur CodeS-SourceS
étant le créateur de cette source, je pourrais t'expliquer, mais il va déjà falloir que tu comprennes que cette source gère 2 choses : le déplacement logique et le déplacement physique ...

Pour la logique, c'est simple, il ne faut rien changer.

Pour le physique, c'est là qu'il faut tout revoir de A à Z !

- Changer le modèle d'affichage de la grille
- Modifier le principe de déplacement du personnage (nombre magique : 26.656°)
- Modifier les changements de profondeur du personnage. Pour celà, tu dois te baser sur un alignement en diagonale de tes blocs et pas en ligne horizontale comme indiqué dans la source. il faut donc aligner tes blocs en diagonale aussi lors de ta création de carte.

Je précise ici que le principe de jeu en 3D iso requiers une bien plus grande maîtrise de Flash et que si je me suis basé sur un Zelda-Like, c'est bien parce que ce principe est plus simple pour débuter !
Alors étudie en profondeur ma source avant de te lancer dans l'ISO, car c'est plutôt niveau expert qu'il faut être pour tout bien comprendre. Je n'ai fait que donner les bases du logique/physique.

Peg'


Cette discussion est classée dans : déplacement, grille, perso, personnage, coordperso


Répondre à ce message

Sujets en rapport avec ce message

deplacement aléatoire VS obstacles [ par fxdome ] Bonjour à tous !Je suis en train de développer un petit parcours type RPG. Je contrôle le déplacement d'un personnage dans un environnement en fausse Personnage le saut [ par kodiask ] Voillà je fait un petit jeu et j'aurai beosin de votre aide :)j'ai un personnage je fais mon sol, ce personnage peut avancer droite gauche etc...mais probleme d'animation personnage [ par nicoool18 ] bonjour, Voila j'ai un probleme d'animation de personnage : Voici le .FLA : nicoool.free.fr/Autres/YeahMoisi.fla en fait, quand on apuis sur droite o déplacement sur une grille [ par heika ] Avant tout j'me présente: Ronan étudiant en communication.Je suis nouveau donc, si je ne poste pas au bon endroit merci de déplacer mon topic :)Voilà changer la vitesse de déplacement [ par Faatalis ] BonjourJe débute en flash, et je n'arrive pas à changer la vitesse de déplacementd'un perso :J'ai créé une variable : vitesse = 10;que j'ai placé sur personnage sympa [ par ludo_4460 ] je continue a preparer mon site avant une mise en ligne effective. mias jusque la, je ne trouvais pas ce qu il manquait pour en faire un site sympa. c faire bouger la fenetre avec le déplacement du perso [ par grinding_yanus ] Alors déjà bonjour à tous,je me suis inspiré de plusieurs tuto sur ce site pour faire un petit jeu pour m'entraîner à l'utilisation d'actionscript et Déplacement d'un clip d'une frame à l'autre [ par vegetalain ] bonjour, j'essais de faire un jeu où l'on déplace un personnage, avec les touches directionnelles... il y a un décors par frame. soit 3 décors pour le personnage qui bouge quand le curseur de la souris passe dessus [ par Miss1 ] Bonjour,j'ai crée un clip de mon personnage que je laisse immobile en time line 1 et qui bouge en timeline 20se que je voudrais c'est que lorsque le c Zoom sur map + déplacement [ par grunge_1 ] Salut a vous tous! Je fait un site en temps que stagière pour un zonning industriel et c'est la première foi que je bricole quelque choses avec action


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,312 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales