CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Actionscript]Tile based map:details

fil_razorback
fil_razorback
Niveau 10
30 mars 2005 à 22:21:16

Hello tout le monde :) je poursuis ma folle ascension flashesque et je me suis lancé aujourd´hui dans une notion qui va me servir : le tile based mapping ( je m´occuperai de la 3d isometrique apres, je fais les choses 1 par une ^^).
J´ai lu plusieurs fois un excellent tutorial sur le sujet, j´ai pratiquement tout compris et en guise d´"exercie pratique", j´ai traduit et ajouté des commentaires au code.
Voici le résultat que j´ai obtenu, les questions que je me pose sont dans les commentaires, merci d´avance de toute réponse :)

Le code commenté:

/ / La map est un tableau en 2D
plaine = [[1, 1, 1, 1, 1, 1, 1, 1], [1, 0, 0, 0, 0, 0, 0, 1], [1, 0, 1, 1, 0, 0, 0, 1], [1, 0, 0, 0, 1, 1, 0, 1], [1, 0, 0, 0, 0, 0, 0, 1], [1, 1, 1, 1, 1, 1, 1, 1]];
/ / Crée l´OBJET game, qui contient toutes les infos
game = {tileW:30, tileH:30};
/ / tile de type 0 ( herbe par exemple)
game.Tile0 = function() {
};
game.Tile0.prototype.walkable = true;
game.Tile0.prototype.frame = 1;
/ / tile de type 1 ( eau par exemple)
game.Tile1 = function() {
};
game.Tile1.prototype.walkable = false;
game.Tile1.prototype.frame = 2;
/ / fonction qui plce les tiles
function buildMap(map) {
// Crée le MovieClip " empty" ( = vide) qui contient tout : tiles et persos
_root.attachMovie("empty", " tiles", ++d);
// permet d´appeler tiles par game.clip ( inclus dans game)
game.clip = _root.tiles;
// on récupère les dimensions de la map a partir de l´array
var mapWidth = map[0].length;
var mapHeight = map.length;
// boucle qui place les tiles rangée par rangée
for ( var i = 0; i<mapHeight; ++i) {
for ( var j = 0; j<mapWidth; ++j) {
// mets le nom le tile qu´on s´apprete a placer en variable ( avec ses coordonnées)
var name = " t_"+i+"_"+j;
// crée le tile qu´on s´apprete a placer et le nomme ( trad. pas sure)
game[name] = new game["Tile"+map[i][j]]();
// attache le clip " tile" à empty, lui donne son nom d´occurences et...?
game.clip.attachMovie("tile", name, i*100+j*2);
//donne ses coordonnées au tile sur la scene ( coord * largeur/hauteur du tile)
game.clip[name]._x = ( j*game.tileW);
game.clip[name]._y = ( i*game.tileH);
// j´ai pas compris comment mais on va à la frame de tile qui represente tile0 ou tile1

game.clip[name].gotoAndStop(game[name].frame);

}
}
}
/ / appel de la fonction qui génère la map et stop
buildMap(myMap);
stop();

fil_razorback
fil_razorback
Niveau 10
30 mars 2005 à 23:41:15

:up: et dodo :)

luxregina
luxregina
Niveau 10
31 mars 2005 à 01:24:27

Hummm . ..peut tu donner le lien de ton tutorial > j´aimerais voir le code original non commente . .. parce qu´il me semble que tu y a inclus des erreurs ( par exemple, ce n´est pas buildMap(myMap); mais buildMap(plaine); :))

de plus, il y a pas mal d´elements qui pourraient etre codes autrement, et je ne comprends pas pourquoi il s´y est prit de cette maniere

c´est effectivement la ligne

game.clip[name].gotoAndStop(game[name].frame);

qui me pose soucis dans la mesure ou je ne vois pas le sens de " frame" : c´est une variable non declaree nulle part, et n´est pas une procedure de flash , a moins que ce ne soit qu´un code specifique a Flash MX 2004 ( que je ne connais pas ) . ..

Pour moi, la maniere de proceder serait de mettre

game.clip[name].gotoAndStop(game[name].map[i][j]+1
);

( +1 parcequ´un array commence a 0, alors que les frames commencent a 1 )

Bref, je suis embrouille :)

Donc le lien vers le tut serait sympa pour tirer ca au clair . .

sinon, dans ta ligne
game.clip.attachMovie("tile", name, i*100+j*2);
le i*100+j*2 sont utilises pour faire le Z-sorting, ce qui te permet de savoir quelles tiles sont devant les autres > i*100+j*2 vont donc te donner la profondeur ( depth) . .. ce qui la non plus ne fait pas beaucoup de sens dans le mesure ou on est en 2D plate et non ISO . ..

fil_razorback
fil_razorback
Niveau 10
31 mars 2005 à 07:44:20

alors dans l´ordre: le lien du tuto est ici:
http://www.tonypa.pri.ee/tbw/tut02.html
je tiens a dire a quel point ce site est merveilleux ( mais pas optimisé pour mx je crois), j´ai tout survolé et je me suis attaqué au detail, c´est dans un anglais simple, bien détaillé...bref le reve :)

Pour le myMap au lieu de plaine, je n´avais pas fait attention, j´avais au debut en projet de créer une map de plaine mais j´ai changé d´avis en cours de route ( mon but final etant l´isometrique, je vais pas me casser le c..a faire de beux tiles standards) et j´ai oublié de changer le nom lors de l´appel de la fonction ( il me semble qu´a part les commentaires c´est tout ce que j´ai bidouillé)

Concernant:

game.clip[name].gotoAndStop(game[name].map[i][j]+1

) ;
le game.clip[name] permet d´accéder au tile qu´on vient de placer, on lui fait un gotoandstop mais je comprends pas bien ce que viennent faire les coordonnées du tile [i] et [j] dans le choix de la frame la dedans :question:

Et enfin, la profondeur, je comprends maintenant le systeme mais je vois pas comment sont déterminés les valeurs, pourquoi attribuer 100i+2j et pas 95i+8j par exemple? c´est pour que les tils se superposent en ordre logique dans le cas de l´isometrique? ( tiles en bas a gauche par dessus ceux de droite)

Merci beaucoup en tout cas :)

luxregina
luxregina
Niveau 10
31 mars 2005 à 09:55:26

Je vais regarder ca :) . .. effectivement, c´est le site de reference :) donc il doit y avoir de bonne raisons . .. et vu que je le connais bien, si je ne comprends toujours pas, je lui demanderai directement :D

luxregina
luxregina
Niveau 10
31 mars 2005 à 10:09:31

j´avais pas vu :)

game.Tile0.prototype.frame = 1;

va avec

game.clip[name].gotoAndStop(game[name].frame);

C´est dans la declaration de la nature des tiles qu´est declaree la frame cible :) . ..la faute a la presentation pourrie du code dans jeuxvideo.com, c´est super pas clair a lire

Donc la question de la frame etant resolue . ..

pour le reste, regarde aussi :
http://oos.moxiecode.com/tut_01/index.html

C´est le " maitre" a penser de Tonypa, meme si ils ont des methodes differentes - tu verra que le code est plus simple, et ne comporte pas ce parametre de profondeur qui est intriguant . ..

J´essaye de te trouver une reponse, et revient vers toi :)

luxregina
luxregina
Niveau 10
31 mars 2005 à 10:52:40

Bon ;

game.clip.attachMovie("tile", name, i*100+j*2);

pourrait etre remplace par

c++;
game.clip.attachMovie("tile", name, c); / /(essaye, tu verra . ..et c´est tout de meme plus simple)

ca marcherai pareil : la seule condition, c´est de rajouter la ligne d´incrementation

c++;

avant de dessiner tes tiles . .. je cherche toujours a comprendre pourquoi il s´y est pris comme ca, en general, Tony ne fait pas les choses sans raisons :)

luxregina
luxregina
Niveau 10
31 mars 2005 à 10:56:46

humm . ..je suis idiot :

game.clip.attachMovie("tile", name, c++);

marche pareil, et ca t´economise une ligne . ..

ATTENTION > tu ne peux te permettre cela que parce que Flash autorise la creation de variable au vol :) . ..tu ferais ca dans un autre langage, comme le c++ ( justement :)) tu te ferais taper sur les doigts :)

luxregina
luxregina
Niveau 10
31 mars 2005 à 11:20:07

J´avais oublie cette question >

je comprends pas bien ce que viennent faire les coordonnées du tile [i] et [j] dans le choix de la frame la dedans

Ce n´est pas dans le choix de la frame, mais dans le choix du chemin pour acceder a la bonne tile : et comme j´ai fait ca vite, je me suis trompe :) :

l´idee est d´acceder au bon movieclip en allant checher la bonne frame ; dans ce cas, par exemple, ta premiere tile ( [0][0] s´appelle t_0_0 ( puisque name = " t_"+i+"_"+j ) ... et dans ce movie clip, tu lui fais afficher la frame 1 ou 2

du coup :

game.clip[name].gotoAndStop(game[name].frame);

et

game.clip[name].gotoAndStop(game["t_"+i+"_"+j].fra
me);

veulent dire la meme chose . .. mais tu comprends ma betise d´avoir voulu faire sauter la variable puisqu´au final, elle rend l´instruction plus lisible :)

fil_razorback
fil_razorback
Niveau 10
31 mars 2005 à 18:28:38

Je résume ce que j´ai compris:

Apres " réecriture", la ligne :
game.clip.attachMovie("tile", name, c++);
permet d´afficher chaque tile plus " haut" que le precedent ( mais cela n´est utile que dans le cas de l´isometrique).

Dans:
game.clip[name].gotoAndStop(game[name].frame);
le . frame permet d´acceder à la propriété ( désolé, je ne connais pas les termes exacts) frame du tile dont on s´occupe actuellement ( tile désigné par [name]),et ainsi de mettre la frame1 si c´est un tile 0 et la frame2 si c´est un tile1 .
( c´est surtout le . frame que je comprennais pas).

Merci beaucoup, c´est beaucoup plus agréable de comprendre ce qu´on fait :)

fil_razorback
fil_razorback
Niveau 10
31 mars 2005 à 18:32:37

Je viens de lire le lien que tu m´as donné, cela confirme ce que j´avais compris ( notamment sur la profondeur) :)

fil_razorback
fil_razorback
Niveau 10
31 mars 2005 à 19:33:16

Introduction:
Fort de la comprehension de ce chapitre, j´ai tenté de passer la map en isometrique, j´ai survolé tres vite les chapitres precedent celui la histoire de pas trop perdre le fil puis j´ai tenté d´adapter le code pour n´avoir que la map ( pas le personnage etc etc..), j´ai donc fait beaucoup de mofications...
mon resultat de code est ici ( avec commentaires vites faits):
http://mickledingue.free/fr/filrazorback/hsite/isomap.txt

Précision :
-J´ai crée un mc tile ( lié a l´Action script sous le meme nom) qui contient en frame 1 de l´herbe et en frame 2 de l´eau. Mes tiles ( vites faits ) ont pour dimensions 42*22 px ( si on les mets dans un rectangle)

Problème:
Ca marche pas, rien ne s´affiche

Merci d´avance de me expliquer/signaler/corriger les erreurs ( y´en a surement pas mal)...

En esperant comprendre ce chapitre avant ce soir ( sinon jvais pas reussir à m´endormir :( ) , merci d´avance :)

fil_razorback
fil_razorback
Niveau 10
31 mars 2005 à 19:35:10

lien foireux? deuxieme essai ( je suis sur du lien, si ca marche pas ca vient de jvcom):
http://mickledingue.free.fr/filrazorback/hsite/isomap.txt

luxregina
luxregina
Niveau 10
31 mars 2005 à 20:33:55

nan, tu ne peux pas me mettre que le code > il faut me mettre le fichier en entier, enregistre en Flash MX ( je n´ai pas 2004)

Sinon, la depth n´est pas aussi simple que cela - oui, cela permet de gerer la profondeur, mais il faut aussi savoir que Flash n´aime pas avoir deux MC sur le meme niveau ET SURTOUT PAS au niveau 0 :) ( ouisque c´est la profondeur par defaut de tout ton code )

donc, la ligne d=0; cree une erreur . ..

ainsi que clip.attachMovie("tile", name, d);
devrais logiquement etre d++ ( tu incremente d de 1 a chaque fois )

mais encore une fois, sans le fichier complet, je peux me tromper . ..

fil_razorback
fil_razorback
Niveau 10
31 mars 2005 à 20:35:43

je te fais un lein tout de suite :)

fil_razorback
fil_razorback
Niveau 10
31 mars 2005 à 20:38:17

http://mickledingue.free.fr/filrazorback/hsite/tile_based_map_iso_mx.fla

luxregina
luxregina
Niveau 10
31 mars 2005 à 20:51:38

une petite precision : je ne suis pas tout a fait sur que ce code soit approprie pour un debutant, j´avais la flemme d´expliquer pourauoi hier soir, mais j´ai plus de temps ce matin :

Dans ta traduction, il y a 2 parametres important qui t´ont echappe, et sur lesquels tu aurais du me poser des questions, le probleme etant que je ne suis pas sur de pouvoir y repondre :)

game.Tile0 = function() {}; avec les prototypes qui s´ensuivent
et
game[name] = new game["Tile"+map[i][j]]();

Ces deux lignes sont extremement importantes, et contribuent a toute la philosophie du moteur de Tonypa, et de son code en general

Si tu compare avec http://oos.moxiecode.com/tut_01/index.html
tu te rendra compte que le code est le meme, a l´exception de ses lignes ( en incluant les prototypages des tiles0 et tiles1 )

Pourquoi ?

Parce que le moteur de Tonypa est base sur une philosophie Object Oriented : il cree un objet ( Tilenumber), et le prototype, pour ensuite le decliner via newGame de facon a ce que chaque nouvelle iterence beneficie des proprietes de bases ( et donc, par consequent, te permette d´acceder a la propriete frame )
C´est une bonne methode, mais ce n´est pas une methode avec laquelle je suis confortable ; je sais l´appliquer, la reutiliser, mais j´aurais vraiment beaucoup de difficultees a t´expliquer " pourquoi" et " comment" . ..
Je me permet de reinsister sur les tutoriaux de
http://oos.moxiecode.com/#Tutorials
qui sont dans un anglais aussi simple, mais BEAUCOUP plus accessibles pour quelqu´un qui n´est pas encore familiarise avec les fonctions . .. au moins, etudie les deux en parrallele, histoire de voir les differences de code, pour mieux comprendre ce que tu fais :)

La, j´aimerais bien que d´autres codeurs interviennent, et t´explique les concepts simples de l´Objet, et en quoi c´est une methode plus appropriee que celle de Jailbitch ( Moxiecode ) . ..parce que dans ce cas je planche . ..

Pour la petite histoire, c´est Tonypa qui a declenche Two Kingdoms, mon RPG . .. :) j´en ai beaucoup discute avec lui, et a l´epoque, je debutais en Flash, et je me basais sur son code . .. puis je me suis vite rendu compte que son code devenait vite TRES complexe quand il s´agissait d´un moteur qui devenait trop complexe pour moi, j´ai donc modifie mon moteur pour le mettre plus dans la ligne de celui de Moxicode . ..et ja´i eut beaucoup moins de problemes :) . ..

Son code est excellent, mais je ne suis pas sur qu´il s´agisse du meilleur outil pour commencer . ..

fil_razorback
fil_razorback
Niveau 10
31 mars 2005 à 21:52:10

Merci de ta reponse, je vais donc consulter les tuytos moxiecode en priorité;
Concernant la POO, j´ai de vagues notions qui me viennent essentielement du javascript et d´un site que j´ai consulté la semaine derniere dont j´ai paumé l´adresse, c´est un systeme qui ne me plait pas beaucoup, je trouve ca assez tordu...

J´aimerai pouvoir te parler un peu ( 5-10 minutes) en " privé" du projet que je tente de mener à bien pour savoir si tu le penses réalisable, as tu une messagerie instantanée? je te donne les mienne ( si ca peut t´eviter d´etre harcelé par les fans mdr...):
msn:
fil_razorbak@hotmail.com
AIM:
fil1razorbak

merci d´avance :)

fil_razorback
fil_razorback
Niveau 10
31 mars 2005 à 21:57:19

( je viens de feuilleter 2-3 tutos de moxicode, je me retroube beaucoup mieux dans le code, ca utilise que des notions que je connais ( dans ce que j´ai lu), merci une fois de plus :-p )

luxregina
luxregina
Niveau 10
31 mars 2005 à 22:21:11

Bon, je viens de corriger ton code, en me basant sur la methode Tonypa . .. je n´avais jamais regarde de pret, mais je comprends de moins en moins pourquoi il fait certaines choses . .. franchement, je te conseille de t´appliquer sur les tutoriaux de Moxiecode . .. ce sera aussi plus facile pour moi de t´expliquer . ..

bref, voici le code a remplacer :

http://grafikdezign.free..fr/jeuxvideos/comment_iso.txt

Comme tu le vois, tu as oublie PLEIN de choses : passer de la 2D a la 2D iso n´est pas une promenade, et est beaucoup moins simple que les deux bouts de codes que tu avais change :D

Bref, copie / code le code, teste, cela devrait marcher . .. ( par contre, l´antialiasing sur tes tiles fait que c´est moche :))

En ce qui concerne ton projet, je prefererai que tu m´en parle ici : je n´ai pas beaucoup de temps pour ICQ, et vu que je travaille avec, je detesterai etre derange en plein milieu d´une reunion . .. le mieux, c´est que tu m´expose tes idees dans ce topic, je te dirai ce que j´en pense

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment