Aide Compréhension système de MAPs...
Aide Compréhension système de MAPs...
Bonjour
Je poste aujourd'hui ce sujet pour vous demander de l'aide et surtout essaye de m'expliquer ou de me schématiser la réalisation ou un système de MAPs....
Mon moteur RPG avance à grands pas (déplacements terminés, animations, pseudo sous le joueur, etc...) Mais je suis entrain de composer mon Système de MAPs et j'aimerais s'il vous plaît m'expliquer ou me donner une idée de comment faire une map?....
Je croit qu'il faut tout stocker dans un tableau ou une boucle du genre For x = 0 to Next
For y = 0 etc....
J'ai déjà suivi le Tutorial de comtois mais je ne suis pas assez expérimenté pour comprendre ^^.
Merci d'avance pour votre aide.
Je poste aujourd'hui ce sujet pour vous demander de l'aide et surtout essaye de m'expliquer ou de me schématiser la réalisation ou un système de MAPs....
Mon moteur RPG avance à grands pas (déplacements terminés, animations, pseudo sous le joueur, etc...) Mais je suis entrain de composer mon Système de MAPs et j'aimerais s'il vous plaît m'expliquer ou me donner une idée de comment faire une map?....
Je croit qu'il faut tout stocker dans un tableau ou une boucle du genre For x = 0 to Next
For y = 0 etc....
J'ai déjà suivi le Tutorial de comtois mais je ne suis pas assez expérimenté pour comprendre ^^.
Merci d'avance pour votre aide.
Re: Aide Compréhension système de MAPs...
Actuellement j'étudie pour faire une Map en 3D ISO évolué ....Neveware a écrit :Bonjour
Je poste aujourd'hui ce sujet pour vous demander de l'aide et surtout essaye de m'expliquer ou de me schématiser la réalisation ou un système de MAPs....
Mon moteur RPG avance à grands pas (déplacements terminés, animations, pseudo sous le joueur, etc...) Mais je suis entrain de composer mon Système de MAPs et j'aimerais s'il vous plaît m'expliquer ou me donner une idée de comment faire une map?....
Je croit qu'il faut tout stocker dans un tableau ou une boucle du genre For x = 0 to Next
For y = 0 etc....
J'ai déjà suivi le Tutorial de comtois mais je ne suis pas assez expérimenté pour comprendre ^^.
Merci d'avance pour votre aide.
mais en attendant regarde là il y a un tres bon exemple de Cpl_Bator
http://www.purebasic.fr/english/viewtopic.php?t=19741[/code]
Re: Aide Compréhension système de MAPs...
Merci de ton aide mais je commence à m'en sortir un peu...
Petit screen xD :

Mais c'est compliqué de visualiser le code de la map :s....
Petit screen xD :

Mais c'est compliqué de visualiser le code de la map :s....
Code : Tout sélectionner
If InitSprite() = 0 Or InitKeyboard() = 0
MessageRequester("Error", "Can't open DirectX 7 or later", 0)
End
EndIf
OpenScreen(1024,768,32,"")
Declare AfficheMap()
Repeat
ClearScreen(0)
ExamineKeyboard()
AfficheMap()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
End
;
Procedure AfficheMap()
Restore NIVEAU
StartDrawing(ScreenOutput())
For y = 0 To 9
For x = 0 To 9
Read Valeur.l
TAILLE_TUILLE = 64
TX = (x * TAILLE_TUILLE) + ScrollX ; Si tu veut "scrollé" , change la valeur des variables.
TY = (y * TAILLE_TUILLE) + ScrollY
Select Valeur
Case 1 :Box(TX,TY,TAILLE_TUILLE,TAILLE_TUILLE,$00FF00)
Case 0 :Box(TX,TY,TAILLE_TUILLE,TAILLE_TUILLE,$00007F)
EndSelect
Next
Next
StopDrawing()
EndProcedure
; Niveau de 10x10
DataSection
NIVEAU:
Data.l 1,1,1,1,1,1,1,1,1,1
Data.l 1,0,0,0,0,0,0,0,0,1
Data.l 1,0,0,0,0,0,0,0,0,1
Data.l 1,0,0,0,0,0,0,0,0,1
Data.l 1,1,1,1,1,1,1,0,0,1
Data.l 1,0,0,0,0,0,0,0,0,1
Data.l 1,0,0,0,0,0,0,0,0,1
Data.l 1,0,0,0,0,0,0,0,0,1
Data.l 1,0,0,0,0,0,0,0,0,1
Data.l 1,1,1,1,1,1,1,1,1,1
EndDataSection
oui , mais faut bien que les données soit stoker quelque part... ici , c'est pas un fichier , mais en dur dans le programme. ( les datasection )
je ne vais pas te donner la soluce , à toi de trouvé comment mettre les donné de la datasection dans un tableau quelquonque.
indice :
je ne vais pas te donner la soluce , à toi de trouvé comment mettre les donné de la datasection dans un tableau quelquonque.
indice :
Code : Tout sélectionner
dim MaMap(9,9)
En fait j'ai déjà essayé tout sa... mais j'ai mit tellement de variables que je sait plus où j'en suit...
Si le joueur se déplace de +1 en X , sa le déplace virtuellement mais pas sur la map... alors on déplace la MAP de +1 (deplacement_map_x = deplacement_map_x + 1) puis c'est là le hic, si je veux déplacer la map... il faut que je déplace tout les tiles, donc les coordonnées des tiles doivent être deplacement_map_x et deplacement_map_y mais les coordonnées des tiles n'existent pas...
ENFIN BREF VOUS COMPRENEZ MON PROBLEME XD
Si le joueur se déplace de +1 en X , sa le déplace virtuellement mais pas sur la map... alors on déplace la MAP de +1 (deplacement_map_x = deplacement_map_x + 1) puis c'est là le hic, si je veux déplacer la map... il faut que je déplace tout les tiles, donc les coordonnées des tiles doivent être deplacement_map_x et deplacement_map_y mais les coordonnées des tiles n'existent pas...
ENFIN BREF VOUS COMPRENEZ MON PROBLEME XD
Je sait mais déplacement virtuel c'est à dire que la variable position_joueur_x elle seule est changée, mais le joueur ne se déplace pas, c'est la map qui bouge.
Ensuite, je sait que c'est le Scroll qui se déplace... mais forcément si on déplace la map on est obligé d'en déplacer tout les tiles!
J'vous montre mon problème :
En gros Map_position_x et Map_position_y sont les variables, les scrolls de la map si vous préférez, donc si je veux placer un tile je fais :
Sinon la map ne bougera pas si j'ai bien compris...
Et c'est là que je me perds... J'aimerais que chaque Tile ait sa coordonnée X et Y précise pour que je puisse changer chaque tileset de la map...
Voici le début de mon code pour comprendre mes variables un peu :
Je sait que je vais embrouiller pas mal de monde et je m'en excuse mais j'ai besoin d'aide :s
Merci d'avance.
Ensuite, je sait que c'est le Scroll qui se déplace... mais forcément si on déplace la map on est obligé d'en déplacer tout les tiles!
J'vous montre mon problème :
En gros Map_position_x et Map_position_y sont les variables, les scrolls de la map si vous préférez, donc si je veux placer un tile je fais :
Code : Tout sélectionner
DisplaySprite (#Chipset_file, Map_position_x, Map_position_y) ; On affiche le Tile
Et c'est là que je me perds... J'aimerais que chaque Tile ait sa coordonnée X et Y précise pour que je puisse changer chaque tileset de la map...
Voici le début de mon code pour comprendre mes variables un peu :
Code : Tout sélectionner
Enumeration
#Chipset_file
EndEnumeration
;************** SYSTEME DE MAPS - DEBUT DE LA PROGRAMMATION *****************
;-Début de la Programmation
; *************** Définition des variables **************
;-Définition des Variables
Tile_Width = 16 ; Défini la Largeur d'un Tile
Tile_Height = 16 ; Défini la Hauteur d'un Tile
Chipset_file$ = "chipset_1.png" ; Défini le chipset de la MAP.
Map_Width = 100 ; Défini la Largeur de la MAP
Map_Height = 100 ; Défini la Hauteur de la MAP
Map_position_x =New_position_Map_position_x ; Déplacement X sur l'écran...
Map_position_y = New_position_Map_position_y ; Déplacement Y sur l'écran...
Tile_x = 0 ; On défini la variable du Tile actuel X...
Tile_y = 0 ; On défini la variable du Tile actuel Y...
; ************** Chargement des Tiles du Chipset ****************
;- Chargement des Tiles
LoadSprite(#Chipset_file, "data/chipsets/" + Chipset_file$)
; ** Par la Suite, on demande la Hauteur, Largeur du tileset total **
File_chipset_Width = SpriteWidth(#Chipset_file) ; Défini la Largeur du fichier Chipset
File_chipset_Height = SpriteHeight(#Chipset_file) ; Défini la Largeur du fichier Chipset
; ** On découpe ensuite les Tiles pour les Compter **
Total_tiles_Width = File_chipset_Width / Tile_Width ; On calcule le total de tiles en Largeur.
Total_tiles_Height = File_chipset_Height / Tile_Height ; On calcule le total de tiles en Hauteur.
;** On Compte le Total des Tiles **
Total_tiles = Total_tiles_Width * Total_tiles_Height ; On obtient le total des Tiles en faisant Largeur*Hauteur
;** On calcule le total des tiles qu'il y aura sur la MAP**
Total_tiles_map_Height = Map_Height / Tile_Height ; Calcul du nombre de tiles en Largeur
Total_tiles_map_Width = Map_Width / Tile_Width ; Calcul du nombre de tiles en Hauteur
;** On calcule le total **
Total_tiles_map = Total_tiles_map_Height * Total_tiles_map_Width
Merci d'avance.
Et c'est là que je me perds... J'aimerais que chaque Tile ait sa coordonnée X et Y précise pour que je puisse changer chaque tileset de la map...
Ta map est dans un tableau a 2 dimensions ?
Dim Map(100,100) ?
si oui , ta les coordonnées sous les yeux...
Map(0,0) , 0,0 c'est le premier Tile
Map(1,0) c'est le tile à droite du 1°
Map(2,0) etc...
tu vas me dire , oui mais les coordonées de l'écran ??
Simple aussi , tu connais la taille du tile ? on va dire 64.
Map(0,0 )
-> X = 0 x 64 = 0
-> Y = 0 x 64 = 0
donc le 1° tile est en 0,0
Map(1,0 )
-> X = 1 x 64 = 64
-> Y = 0 x 64 = 0
donc le 2° tile est en 64,0
Map(2,0 )
-> X = 2 x 64 = 128
-> Y = 0 x 64 = 0
donc le 1° tile est en 128,0
etc...
J'ai essayé sa :
Mais sa n'affiche qu'un tile, sûrement à cause de Map_position_x... Help svp sa va faire 8heures que je suis dessus T.T...
Code : Tout sélectionner
Dim Select_Tile.b(Map_Height, Map_Width) ; Création du Tableau aux colonnes X et Y...
Select_Tile(1,0) = DisplayTransparentSprite (#Chipset_file, Map_position_x, Map_position_y) ; On affiche le Tile
Select_Tile(1,2) = DisplayTransparentSprite (#Chipset_file, Map_position_x, Map_position_y) ; On affiche le Tile
Tu veux que le joueur reste toujours au centre de l'ecran, et que le monde se deplace sous ses pieds, c'est ça ?
je comprends pas trop comment tu t y prends. Faut dire que tu mets juste "len-t^te" de ton code.
??
Avec ta map dans map(X,Y), X_ et Y_Tuiles le nombre de tuiles qui tiennent à l'ecran, et Decal_X et _Y la position de l'ecran.
Le joueur tu le mets invariablement au centre.. Et tu note sa pos sur la carte avec une variable.
Que est ce qui te pose pb ? Montre tout ton code
je comprends pas trop comment tu t y prends. Faut dire que tu mets juste "len-t^te" de ton code.
Code : Tout sélectionner
For A = 0 to X_Tuiles : For b = 0 to Y_Tuiles
DisplaySprite( Map( A + Decal_X , B + Decal_Y ), A*32, B*32 )
Next B : Next A
Avec ta map dans map(X,Y), X_ et Y_Tuiles le nombre de tuiles qui tiennent à l'ecran, et Decal_X et _Y la position de l'ecran.
Le joueur tu le mets invariablement au centre.. Et tu note sa pos sur la carte avec une variable.
Que est ce qui te pose pb ? Montre tout ton code

nn, faut pas faire comme ça.Dim Select_Tile.b(Map_Height, Map_Width) ; Création du Tableau aux colonnes X et Y...
Select_Tile(1,0) = DisplayTransparentSprite (#Chipset_file, Map_position_x, Map_position_y) ; On affiche le Tile
Select_Tile(1,2) = DisplayTransparentSprite (#Chipset_file, Map_position_x, Map_position_y) ; On affiche le Tile
Select_Tile(1,0) = 1
Ca voudras dire dans la boucle "affiche le sprite "1" "