En 2D : Tableau, List Chainée ou Data?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Neosis
Messages : 113
Inscription : dim. 24/févr./2008 20:11

En 2D : Tableau, List Chainée ou Data?

Message par Neosis »

Bonjour tous le monde :)

Bon je me pose une questions, j'ai créer une map pour faire un jeu, ma map est composé de 768 tuiles. Donc pour afficher ma map j'affiche UN sprite qui contient toutes les tuiles différentes et j'utilise "clipsprite"+"displaysprite" pour afficher CHAQUE tuiles de la map.
SI j'ai beaucoup de tuiles (plus que dans l'exemple que je viens de cité) sachant que j'ai au moins 8 données pour chaque tuile (positionx, positionsy, transparence, ...), en admettant que le PC sur lequel est installé le jeu et merdique :)

Est-ce que l'affichage de la map ne va pas ramé en utilisant un tableau?
Est-il préférable d'utilité une liste chainée ou utilisées les datas?
En résumé quel sont les avantages et inconvénient de ces 3 méthodes?

Merci de m'aiguiller la dessus car je c'est pas trop que choisir :?
Avatar de l’utilisateur
SPH
Messages : 4949
Inscription : mer. 09/nov./2005 9:53

Re: En 2D : Tableau, List Chainée ou Data?

Message par SPH »

Neosis a écrit :Bonjour tous le monde :)

Bon je me pose une questions, j'ai créer une map pour faire un jeu, ma map est composé de 768 tuiles. Donc pour afficher ma map j'affiche UN sprite qui contient toutes les tuiles différentes et j'utilise "clipsprite"+"displaysprite" pour afficher CHAQUE tuiles de la map.
SI j'ai beaucoup de tuiles (plus que dans l'exemple que je viens de cité) sachant que j'ai au moins 8 données pour chaque tuile (positionx, positionsy, transparence, ...), en admettant que le PC sur lequel est installé le jeu et merdique :)

Est-ce que l'affichage de la map ne va pas ramé en utilisant un tableau?
Est-il préférable d'utilité une liste chainée ou utilisées les datas?
En résumé quel sont les avantages et inconvénient de ces 3 méthodes?

Merci de m'aiguiller la dessus car je c'est pas trop que choisir :?
Un sprite avec transparence s'affiche moins rapidement qu'un sprite sans transparence. Alors, si tu peux, adapte au moins ca.
Pour ton sprite contenant toutes les images differentes, c'est une bonne idée, c'est toi qui vois si c'est plus facile a utiliser que X sprites.
Pour un jeu, data est parfait mais essaye de voir quel data il te faut et choisi le plus petit format; genre 8 bits au lieu de 16 si tu peux, 16 au lieu de 32, etc...
Les listes chainée, c'est super mais en fait, tout depend de ce que va gerer ton jeu video.

As tu un code a nous soumettre pour voir ce qui peux etre simplifié ?
Neosis
Messages : 113
Inscription : dim. 24/févr./2008 20:11

Message par Neosis »

Je veux bien te montrer un bout de code dans lequel j'ai utilisé la méthodes tableau, par contre je ne met que les données des 3 premières tuiles sinon le code va être un peu lourd :)

Mon soucis c'est que j'aimerai bien raccourcir mon code:), parce que la il n'y a que 3 tuiles mais imaginer avec plus d'un millier de tuiles ça fait rapidement des millier de ligne!
Je me suis donc dit que ça serai peut être préférable d'utiliser la méthode Data mais comme je ne maitrise pas très bien celui-ci :|
Et surtout j'ai un peu de mal à l'adapter pour la méthode d'affichage.

Lorsque l'on appel la procédure, pour "FileName_01$" il faut mettre le nom de l'image qui contient les tuiles.

Procedure Map_001(FileName_01$,OffsetX.l,OffsetY.l,WidthScreen.l,HeightScreen.l)
Protected WidthMAP, HeightMAP, NB_TileMAP
WidthMAP = 20
HeightMAP = 16
NB_TileMAP = 320

Enumeration
#IMAGE_01
#CHIPSET
EndEnumeration
#TILE_WIDTH=32
#TILE_HEIGHT=32

If LoadImage(#IMAGE_01,FileName_01$)=0
EndIf

Largeur_img = ImageWidth(#IMAGE_01)
Hauteur_img = ImageHeight(#IMAGE_01)
CreateSprite(#CHIPSET,Largeur_img,Hauteur_img)
StartDrawing(SpriteOutput(#CHIPSET))
DrawImage(ImageID(#IMAGE_01),0,0)
StopDrawing()

Structure Tile
id_Tile.l
PosX_Tile.l
PosY_Tile.l
Width_Tile.l
Height_Tile.l
Collision.b
Couleur_Transparent.l
Selection.b
EndStructure

Nb_Tiles=32*8 ;a modifier
Global Dim chipset.Tile(Nb_Tiles)
For Tile_Num=1 To Nb_Tiles
chipset(Tile_Num)\id_Tile = Tile_Num
chipset(Tile_Num)\Width_Tile = 32
chipset(Tile_Num)\Height_Tile = 32
chipset(Tile_Num)\Collision = 0
chipset(Tile_Num)\PosX_Tile = PosX_Tile
chipset(Tile_Num)\PosY_Tile = PosY_Tile
chipset(Tile_Num)\Couleur_Transparent = 0
PosX_Tile+#TILE_WIDTH
If PosX_Tile=ImageWidth(#IMAGE_01) : PosX_Tile=0 : PosY_Tile+#TILE_HEIGHT : EndIf
If PosY_Tile=ImageHeight(#IMAGE_01) : PosY_Tile=0 : EndIf
Next

Structure TileMAP
ID_TileMAP.l
ID_surface1MAP.l
ID_surface2MAP.l
ID_surface3MAP.l
PosX_TileMAP.l
PosY_TileMAP.l
CollisionMAP.b
Couleur_TransparentMAP.l
EndStructure

Dim Map.TileMAP(NB_TileMAP)
; === Tuile N°1.....X:0.....Y:0
Map(1)\ID_TileMAP=1
Map(1)\ID_surface1MAP=2
Map(1)\ID_surface2MAP=0
Map(1)\ID_surface3MAP=0
Map(1)\PosX_TileMAP =0
Map(1)\PosY_TileMAP =0
Map(1)\CollisionMAP =0
Map(1)\Couleur_TransparentMAP =0
; === Tuile N°2.....X:32.....Y:0
Map(2)\ID_TileMAP=2
Map(2)\ID_surface1MAP=6
Map(2)\ID_surface2MAP=0
Map(2)\ID_surface3MAP=0
Map(2)\PosX_TileMAP =32
Map(2)\PosY_TileMAP =0
Map(2)\CollisionMAP =0
Map(2)\Couleur_TransparentMAP =0
; === Tuile N°3.....X:64.....Y:0
Map(3)\ID_TileMAP=3
Map(3)\ID_surface1MAP=2
Map(3)\ID_surface2MAP=0
Map(3)\ID_surface3MAP=0
Map(3)\PosX_TileMAP =64
Map(3)\PosY_TileMAP =0
Map(3)\CollisionMAP =0
Map(3)\Couleur_TransparentMAP =0

ClearScreen($000000)

For Tile_NumMAP=1 To NB_TileMAP
If Map(Tile_NumMAP)\ID_surface1MAP > 0
Tile_Num = Map(Tile_NumMAP)\ID_surface1MAP
PosX_Tile = chipset(Tile_Num)\PosX_Tile
PosY_Tile = chipset(Tile_Num)\PosY_Tile
ClipSprite(#CHIPSET,PosX_Tile,PosY_Tile,#TILE_WIDTH,#TILE_HEIGHT)
Xmap = (Map(Tile_NumMAP)\PosX_TileMAP)-OffsetX
Ymap = (Map(Tile_NumMAP)\PosY_TileMAP)-OffsetY
If Xmap>=0 And Ymap>=0
DisplaySprite(#CHIPSET,Xmap,Ymap)
EndIf
EndIf
If Map(Tile_NumMAP)\ID_surface2MAP > 0
Tile_Num = Map(Tile_NumMAP)\ID_surface2MAP
PosX_Tile = chipset(Tile_Num)\PosX_Tile
PosY_Tile = chipset(Tile_Num)\PosY_Tile
ClipSprite(#CHIPSET,PosX_Tile,PosY_Tile,#TILE_WIDTH,#TILE_HEIGHT)
Xmap = (Map(Tile_NumMAP)\PosX_TileMAP)-OffsetX
Ymap = (Map(Tile_NumMAP)\PosY_TileMAP)-OffsetY
TransparentSpriteColor(#CHIPSET,chipset(Tile_Num)\Couleur_Transparent)
If Xmap>=0 And Ymap>=0
DisplayTransparentSprite(#CHIPSET,Xmap,Ymap)
EndIf
EndIf
If Map(Tile_NumMAP)\ID_surface3MAP > 0
Tile_Num = Map(Tile_NumMAP)\ID_surface3MAP
PosX_Tile = chipset(Tile_Num)\PosX_Tile
PosY_Tile = chipset(Tile_Num)\PosY_Tile
ClipSprite(#CHIPSET,PosX_Tile,PosY_Tile,#TILE_WIDTH,#TILE_HEIGHT)
Xmap = (Map(Tile_NumMAP)\PosX_TileMAP)-OffsetX
Ymap = (Map(Tile_NumMAP)\PosY_TileMAP)-OffsetY
TransparentSpriteColor(#CHIPSET,chipset(Tile_Num)\Couleur_Transparent)
If Xmap>=0 And Ymap>=0
DisplayTransparentSprite(#CHIPSET,Xmap,Ymap)
EndIf
EndIf
Next

FlipBuffers()

EndProcedure
Avatar de l’utilisateur
SPH
Messages : 4949
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

Ha, je ne m'attendais pas a un code si "compact et structuré" je dirais. Heu, en prenant le probleme à l'envers, as tu plutot une ou 2 captures d'ecran pour qu'on visualise ou et comment sont tes tuiles ?

ps :

Code : Tout sélectionner

If LoadImage(#IMAGE_01,FileName_01$)=0 
EndIf 
ne sert a rien si tu ne met pas un request ou un end dedans car =0 ou pas, le code continuera...
Neosis
Messages : 113
Inscription : dim. 24/févr./2008 20:11

Message par Neosis »

SPH a écrit : ps :

Code : Tout sélectionner

If LoadImage(#IMAGE_01,FileName_01$)=0 
EndIf 
ne sert a rien si tu ne met pas un request ou un end dedans car =0 ou pas, le code continuera...
heu nan ça c'est un oublie idiot de ma part :) j'ai oubliai le "messagerequester"

voila un aperçu d'une map à deux bal :) les tuiles sont disposé en ligne la ouje leur dit d'être :roll:

Mais tu ne ma pas répondu a mes questions quel sont les avantages des 3 méthodes

Image
Avatar de l’utilisateur
SPH
Messages : 4949
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

Neosis a écrit :
SPH a écrit : ps :

Code : Tout sélectionner

If LoadImage(#IMAGE_01,FileName_01$)=0 
EndIf 
ne sert a rien si tu ne met pas un request ou un end dedans car =0 ou pas, le code continuera...
heu nan ça c'est un oublie idiot de ma part :) j'ai oubliai le "messagerequester"

voila un aperçu d'une map à deux bal :) les tuiles sont disposé en ligne la ouje leur dit d'être :roll:

Mais tu ne ma pas répondu a mes questions quel sont les avantages des 3 méthodes

Image
Heu, les tuiles, c'est le sol ?? Si oui, AUCUNE ESITATION, n'utilise surtout pas de transparence !

Les 3 methodes ont des avantages mais seulement dans certains contextes. Par exemple, une pluie d'etoiles filantes qui finissent par disparaitre, une liste chainée est totalement adapté a ca.
Mais tiens ne t'empeche d'allier les 3 techniques en meme temps !
Dans un jeu, la section DATA est quasi obligée.
Neosis
Messages : 113
Inscription : dim. 24/févr./2008 20:11

Message par Neosis »

bon va falloir que je me mette au data ça va me faire bouger pas mal de choses ... j'ai la flem :lol:
Heu, les tuiles, c'est le sol ?? Si oui, AUCUNE ESITATION, n'utilise surtout pas de transparence !


En faites il y a 3 couches :
La première c'est le sol et la ya pas de transparences! (Affichage de l'herbe)
La 2e et 3e couche il y a une couleur de transparence. (Affichage des petit objet fleur et autre)

l'affichage de la 2e et 3e couche se fait uniquement si il ya une tuile a mettre je m'explique:
Sur la tuile en haut a gauche "la première" il ni a qu'une couche =>l'herbe donc pas d'affichage pour la 2e et 3e couche
La ou ya la fleur ya 2 couches affiches de l'herbe puis ensuite de la fleur
Anonyme

Message par Anonyme »

j'ai lu en diagonale.
2 3 trucs pour l'optimisation.

Eviter un max des clip en temps réel ( je ne sais pas si tu le fait )


Admetons une "map" de 512x512 tuilles , les tuilles font 64 pixel de long / large

tu peut donc voir que 16 tuilles en X et 12 tuilles en Y pour une résolution de 1024x768

donc tu n'affiche pas la map avec :

Code : Tout sélectionner

for y = 0 to 512
for x = 0 to 512
mais

Code : Tout sélectionner

for VisX = 0 to 16
for VisY = 0 to 12

Pour ajouté un scrooling tu fait :

Code : Tout sélectionner

for VisX = ScX to ScX+16
for VisY = ScY to ScY+12
les boucles sont minimes.

sinon pour le stockage , pour être performant , allocatememory() est le must en perf.

je vais te codé un p'tit snippet te montrant mon point de vue.
Anonyme

Message par Anonyme »

V'la un code optimisé , tu peut faire mieux en asm , mais bon , le framerate est excelent , il est au max de se que mon écran plat donne (60hz) la map fait 1024x1024 avec des tuilles en 32x32 et une réso de 1680x1050.
Je pense que c'est la meilleur façon de gerer des tuilles.

Code : Tout sélectionner

InitSprite() : InitKeyboard() : InitMouse()

#SW=1680
#SH=1050

OpenScreen(#SW,#SH,32,"MAP")

  #GRASS =0
  #WATER =1

Structure TILE_INFO
    SpriteID.l
    LesInfosQueTuVeut.b
EndStructure


Global MapSize   = 1024
Global TileSize  = 32
Global ScrollX.f = 0
Global ScrollY.f = 0
Global VisX      = (#SW/TileSize)+1
Global VisY      = (#SH/TileSize)+1
Global ScrollSpeed.f = 0.2

Global *MAP.l = AllocateMemory(MapSize*MapSize*4) ; C'est une liste de pointeur sur la structure TILE_INFO

Procedure  SET_TILE_INFO(x,y,*struct.TILE_INFO)
AdresseMemoire = *MAP + (x*4) + MapSize * (y*4)
PokeL(AdresseMemoire,*struct)
EndProcedure


Procedure GET_TILE_INFO(x,y)
AdresseMemoire = *MAP + (x*4) + MapSize * (y*4)
ProcedureReturn PeekL(AdresseMemoire)
EndProcedure


CreateSprite(#GRASS,TileSize,TileSize)
    StartDrawing(SpriteOutput(#GRASS))
      Box(0,0,TileSize,TileSize,$007F00)
    StopDrawing()
    
CreateSprite(#WATER,TileSize,TileSize)
    StartDrawing(SpriteOutput(#WATER))
      Box(0,0,TileSize,TileSize,$7F0000)
    StopDrawing()


; On fabrique une carte aléatoire basé sur random...
RandomSeed(65535)

For x = 0 To 512-1
  For y = 0 To 512-1

  R = Random(1) ; Herbe ou eau...
  *Tuille.TILE_INFO = AllocateMemory(SizeOf(TILE_INFO))
  Select R
    Case 0 :  *Tuille\SpriteID = #GRASS
    Case 1 :  *Tuille\SpriteID = #WATER
  EndSelect
  
  SET_TILE_INFO(x,y,*Tuille)
  
  
  Next
Next 

;-MAIN()
Repeat
  ClearScreen($707FFF)
    ExamineKeyboard()
    ExamineMouse()
    
    
    If KeyboardPushed(#PB_Key_Escape):  quit = 1 : EndIf  
    If KeyboardPushed(#PB_Key_Right) :  ScrollX + ScrollSpeed : EndIf 
    If KeyboardPushed(#PB_Key_Left)  :  ScrollX - ScrollSpeed : EndIf   
    If KeyboardPushed(#PB_Key_Up)    :  ScrollY + ScrollSpeed : EndIf 
    If KeyboardPushed(#PB_Key_Down)  :  ScrollY - ScrollSpeed : EndIf   
  
  
      For y = Int(ScrollY) To Int(ScrollY)+VisY
        For x = Int(ScrollX) To Int(ScrollX)+VisX
        If x=>0 And x<MapSize And y=>0 And y<MapSize
          *Tuille_a_afficher.TILE_INFO = GET_TILE_INFO(x,y)
            DisplaySprite(*Tuille_a_afficher\SpriteID, (x -ScrollX)*TileSize,(y - ScrollY)*TileSize)
        EndIf 
        Next 
      Next 
  
  
  If FPST<ElapsedMilliseconds()
  FPST=ElapsedMilliseconds()+1000
  FPS = FPSC
  FPSC=0
  Else
  FPSC+1
  EndIf 
  
  
  
  StartDrawing(ScreenOutput())
  DrawText(0,0,"FRAME RATE = " +Str(FPS))
  StopDrawing()
    

FlipBuffers(1)
Until quit=1
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

pour repondre a la question posé , je dirai

les tableaux sont bien si l'on connais a l'avance le nombre d'elements !!

les listes chainée sont bien si l'on ne connais pas a l'avance le nombre d'elements affiché (comme la pluie d'etoile que SPH dit .)

les Datas, sont parfait a bien des egars !! :D
parceque contrairement au autre technique,ils n'oblige pas a avoir tout en Ram le dessin :D
et parcequ'il est tres facile de dessiner a la main des Maps !!

imagine que le Chiffre 1 soit egale a de l'herbe
le chiffre 2 a un arbre
le 0 a de l'eau !!
ta map fait 16 briques de large et 16 briques de haut

tu peux direct dessiner ta map comme ça

Code : Tout sélectionner


DataSection
    map1:
    Data.l 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
    Data.l 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
    Data.l 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
    Data.l 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
    Data.l 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
    Data.l 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
    Data.l 1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1
    Data.l 1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1
    Data.l 1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1
    Data.l 1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1
    Data.l 1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1
    Data.l 1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1
    Data.l 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
    Data.l 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
    Data.l 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
    Data.l 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5 ; <--- code de fin de tableau
    map2:
    Data.s "*","*","*","*","*","*","*","*","*","*","*","*","*","*","*","*"
    Data.s "*","*","*","*","*","*","*","*","*","*","*","*","*","*","*","*"
    Data.s "*","*","*","*","*","*","*","*","*","*","*","*","*","*","*","*"
    Data.s "*","*","*","*","*","*","*","*","*","*","*","*","*","*","*","*"
    Data.s "*","*","*","*","*","*","*","*","*","*","*","*","*","*","*","*"
    Data.s "*","*","*","*","*","z","z","z","z","z","z","*","*","*","*","*"
    Data.s "*","*","*","*","*","z","*","*","*","*","z","*","*","*","*","*"
    Data.s "*","*","*","*","*","z","*","*","*","*","z","*","*","*","*","*"
    Data.s "*","*","*","*","*","z","*","*","*","*","z","*","*","*","*","*"
    Data.s "*","*","*","*","*","z","*","*","*","*","z","*","*","*","*","*"
    Data.s "*","*","*","*","*","z","*","*","*","*","z","*","*","*","*","*"
    Data.s "*","*","*","*","*","z","z","z","z","z","z","*","*","*","*","*"
    Data.s "*","*","*","*","*","*","*","*","*","*","*","*","*","*","*","*"
    Data.s "*","*","*","*","*","*","*","*","*","*","*","*","*","*","*","*"
    Data.s "*","*","*","*","*","*","*","*","*","*","*","*","*","*","*","*"
    Data.s "*","*","*","*","*","*","*","*","*","*","*","*","*","*","*","*"
Data.s "888";<--- code de fin de tableau
EndDataSection
tu vois l'avantage des Data c'est que Visuellement on vois deja la map
c'est surtout valable avec les Strings (Map2) ou l'on, vois bien ressortir le carré du millieu :D

et dans la map 1 l'eau a une forme de V :)

et pui s comme ça tes map sont dans le code, donc pas de Ram prise en permanence, juste au moment de l'affichage :D

ensuite c'est facile d'effectuer des modif de dessin :D

et puis un éditeur de map, ne sera qu'un petit prg qui transforme un dessin effectué a la souris en serie de Data :D

il suffira donc une fois tes data pre dessiné , de les lire un par un et de dessiner la brique correspondant au "signal" du Data (un 1,un 0 ou bien un "*",ou "z"), suivant si tu choisi des chiffre ou des lettre pour symboliser tes briques :D

ya aussi une autre possibilité derivé des data !! :D
Les chaines de caracteres+tableau :D

genre

Code : Tout sélectionner

map$(1)="****************"
map$(1)="****************"
map$(2)="****************"
map$(3)="****************"
map$(4)="****************"
map$(5)="*****0000*******"
map$(6)="*****0000*******"
map$(7)="*****0000*******"
map$(8)="*****0000*******"
map$(9)="****************"
map$(10)="****************"
map$(11)="****************"
map$(12)="****************"
map$(13)="****************"
map$(14)="****************"
map$(15)="****************"

ensuite tu lis tes chaines, avec Mid() et si tu trouve un "*" tu affiche de l'herbe , et un "0" tu affiche de l'eau :D

l'utilisation de StringField() peut etre envisageable
a condition de mettre une virgule par exemple

Code : Tout sélectionner

For k=1 To 16
  Debug StringField(map$(1)="*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*", k, ",")
Next
Anonyme

Message par Anonyme »

le problème est la souplesse , les datas c'est trop rigide , imagine faire un STR comme sur le forum allemand... tes exes vont faire des tailles incroyable ^^
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Cpl.Bator a écrit :le problème est la souplesse , les datas c'est trop rigide , imagine faire un STR comme sur le forum allemand... tes exes vont faire des tailles incroyable ^^
bof ! 1024 caracteres = 1 kilo pour une map de 32x32 tuiles ça va pas loin :)
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Les maps en datas... Mouais... Pas très pratique pour faire un éditeur. Il faudra générer les fichiers ascii et les intégrer au source; sinon il faudra les encoder pour qu'ils ne soient pas modifiables par le joueur; et puis quand on a des cartes de tailles différentes, bof.

Sinon, la méthode la plus souple est à mon avis les tableaux. Tout est intégré sous pure pour les gérer, y compris le chargement/sauvegarde et le tri. C'est aussi plus économique en mémoire qu'une liste chaînée, et plus rapide. Cette dernière est surtout recommandée quand tu dois insérer/supprimer des éléments entre d'autres, le tri étant implicite (il ne nécessite aucune opération supplémentaire)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

djes a écrit :et puis quand on a des cartes de tailles différentes, bof.
c'est quand même pas courant !!

en général les map ont toute la même taille même si sur certaines , on en utilise qu'une partie :) (c'est quand même pas courant)

c'est d'ailleurs pas pour rien que depuis tres longtemps, les jeux utilisent les Datas, bon c'est peut etre classé 'Old Scool' , mais ça reste efficace , et en plus tres pratique ...

n'oublions pas qu'il ne s'agit pas ici d'un jeux fais sur un moteur3D dernier cris.. , et qu'au vu des petite maps en photo, on reste bien dans le Old Scool , et la les Data, reste la référence (je m'en suis assez tapé comme ça en Basic Ti99/4A et en 1040Stf ) :)
Pas très pratique pour faire un éditeur. Il faudra générer les fichiers ascii et les intégrer au source;
ben il suffit de faire un fichier externe par Map, je vois pas le probleme...
en plus j'ai donné l'exemple en Ascii , mais il peut utiliser des chiffres avec les Data (donné en exemple aussi :) )

encoder ? oui bof, mais c'est pas obligatoire, sauf si le logiciel dois etre vendu, mais franchement ça concerne pas trop de monde :D

les fichiers map peuvent aussi etre archivé en Zip ou autre... :)
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

C'est une question de goût; je préfère me faire un éditeur et charger/sauver les tableaux que me coltiner tout à la main, ou devoir faire un truc pour sauver les data en ascii. Dans son cas, ça a l'air assez statique et oui, les datas peuvent faire l'affaire, mais moi c'est pas ma tasse de thé, je suis trop fainéant :)
Répondre