[Tuto]Utilliser une map .fmp avec Purebasic

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
morukutsu
Messages : 65
Inscription : sam. 29/janv./2005 15:01
Contact :

[Tuto]Utilliser une map .fmp avec Purebasic

Message par morukutsu »

:D S@lut a tous !

Tout d'abord j'ai fait ce tuto car j'ai eu beaucoups de mal a exploiter une map .fmp ( format de Mappy ) avec Purebasic ...

Mappy est un logiciel pour faire des Maps avec des tiles pour vos jeux par exemple ...
Mappy a deux formats : le MAP qui est un format très simple et le FMP qui est un format plus compliqué mais qui a l'avantage de pouvoir gérer plusieurs Layers et qui a les datas integrées dans un seul fichier .

Donc passons aux choses sérieuses : :P

1°) Pour commencer telechargez ce pack : http://nintendoland.free.fr/fichers/mappytest.zip

Ce pack contient deux fichiers mappyeng.pb qui est la librairie permettant le lire une Map et Test.fmp qui est la map que nous allons uttiliser .

2°) Une fois que vous avez le pack mettez ces fichiers dans le meme dossier .

3°) Bon maintenant je vais essayer de vous expliquer le code pour lire une map ...

Code : Tout sélectionner

IncludeFile "mappyeng.pb" 

MSPERFRAME = 15 ;facultatif
mapmaxlayers.l = 2 ;facultatif

Global px.l 
Global py.l 

J'explique ces lignes :
Au debut on inclut la librarie pour pouvoir l'utilliser dans notre programme.
Puis deux lignes facultatives : on definit le nombre de FPS du programme et le nombre de Layers ...
Ensuite on declare deux variables globales la position en x de la map et se position en y

Code : Tout sélectionner

If InitSprite() = 0 Or InitKeyboard() = 0 
  MessageRequester("Erreur","Impossible d'ouvrir DirectX",0) 
  End 
EndIf 

OpenScreen(800,600,32,"Tuto Mappy")
Bon la c'est aussi simple , on initialise le clavier et les sprites puis on teste si ces librairies sont bien initialisées et on ouvre un écran

Code : Tout sélectionner

MapLoad ("test.FMP")
MapInitAnims ()

La c'est une des fonctions de la librairie qui est dans le pack ...
Mapload c'est pour charger une map et Mapinitanims c'est pour charger les animations de la map !
C'est simple !

Code : Tout sélectionner

Repeat 

ExamineKeyboard()

mapupdateanims()

If KeyboardPushed(#PB_Key_Up) : py.l-5 : EndIf
If KeyboardPushed(#PB_Key_Down) : py.l+5 : EndIf
If KeyboardPushed(#PB_Key_Left) : px.l-5 : EndIf
If KeyboardPushed(#PB_Key_Right) : px.l+5 : EndIf
Bon on fait examine keyboard pour que l'on puisse prendre ses données ( je me suis peut etre mal exprimé ? )
On uttilise la fonction mapupdateanims() pour animer les tiles de la carte .
Et la on uttilise cette serie de condition pour faire "scroller" la carte avec les flèches du clavier .

Code : Tout sélectionner

StartDrawing(ScreenOutput())
FlipBuffers() 
ClearScreen(0,0,0)
MapDrawBG (px.l, py.l, 0, 0, 800, 600)
MapDrawFG (px.l, py.l, 0, 0, 800, 600, 0)
StopDrawing()
Bon la aussi c'est simple on commence à dessiner sur l'écran .
On fait Flipbuffers et Clearscreen , inevitable :wink: :P
Puis la on affiche les deux layers grace a cette fonction très simple aussi .

Code : Tout sélectionner

Until KeyboardPushed(#PB_Key_Escape)
MapFreeMem ()
End
Bon la c'est hypersimple , on met la condition d'arret de la boucle , on utillise la fonction MapFreeMem pour liberer de la memoire la Map et voili,voilou !

Donc vous devriez obtenir :

Code : Tout sélectionner

IncludeFile "mappyeng.pb"

MSPERFRAME = 15 
mapmaxlayers.l = 2 

Global px.l 
Global py.l
 
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 
  MessageRequester("Erreur","Impossible d'ouvrir DirectX",0) 
  End 
EndIf 

OpenScreen(800,600,32,"Tuto Mappy")
 
MapLoad ("test.FMP")
MapInitAnims ()

Repeat 

ExamineKeyboard()
mapupdateanims()

If KeyboardPushed(#PB_Key_Up) : py.l-5 : EndIf
If KeyboardPushed(#PB_Key_Down) : py.l+5 : EndIf
If KeyboardPushed(#PB_Key_Left) : px.l-5 : EndIf
If KeyboardPushed(#PB_Key_Right) : px.l+5 : EndIf
 
StartDrawing(ScreenOutput())
FlipBuffers() 
ClearScreen(0,0,0)
MapDrawBG (px.l, py.l, 0, 0, 800, 600)
MapDrawFG (px.l, py.l, 0, 0, 800, 600, 0)
StopDrawing()

Until KeyboardPushed(#PB_Key_Escape)
MapFreeMem ()
End
Voila c'est fini ! :P Vous n'avez plus qu'a tester le code ! Et normalement vous avez une map affichée que vous pouvez bouger avec les flèches du clavier ! :o
Et aussi je n'ai pas mis dans le code une limite auc mouvement que vous pouvez faire ... Donc si vous depassez les limites de la map, le programme va planter oups ^^ :mad:

PS : Ceci ne permet que d'afficher une Map , si quelqu'un trouve un moyen de gerer les collisions :cry: , expliquez le ! Merci
:D
The life is a game...