Bannière

Menu

  Accueil
  Forum (Partagé)

PureBasic

  Présentation
  Tutoriaux
  Téléchargements

3D Games-Creator

  Présentation
  Tutoriaux
     Gestion Scores
     Scrolling 2D
  Téléchargements

Autres

  Téléchargements
  Partenaires
  Liens
  Contact
  Livre d'Or
  News Letter

Tutorial sur la gestion du scrolling et la gestion des événements 2D sans sprites

     

     Le fichier zip ci dessous contient le fichier source, la page d'explication html que vous êtes entrain de lire et les images nécessaires au tutorial.

   Télécharger (284.30Ko)

     J'ai placé les commentaires à ne pas inclure dans le fichier source (de toute façon il est fourit) en bleu.
     Les tiles sont les cases d'une grille placée sur la carte pour éviter de travailler pixel à pixel.

 

` ****************Crée par Oliv pour le site oliv.fr.fm*********************
` ********************inspiré d'un tutorial de Dr.DRi**********************
` *************************Images d'ascii**********************************
` ******************librairie de rpg games maker 2K************************

sync on
hide mouse

` chargement de la carte
load image "carte_tuto.jpg",1

Le tableau que l'on va créer est de 50 sur 38 car la carte est au format 800*600 et un tile=16 pixels. nous avons donc 800/16=50 et 600/16=38

` création d'un tableau disant si les tiles sont occupés pas une action ou
` pas.
dim tiles(49,37)

Pour savoir le type de tile, on met 0 quand aucune action ne ce passe, 1 quand il y a une collision simple, 2 quand il ce passe une action et 3 quand on a une collision et une action

` on remplit le tableau en disant quel tile est occupé et si c'est par une
` collision, une action ou les deux. 1=collision ; 2=action ; 3=les deux
` voici pour les maisons
for x=1 to 3 : for y=6 to 9 : tiles(x,y)=1 : next y : next x
for x=26 to 28 : for y=4 to 7 : tiles(x,y)=1 : next y : next x
for x=13 to 15 : for y=22 to 25 : tiles(x,y)=1 : next y : next x
for x=17 to 19 : for y=18 to 21 : tiles(x,y)=1 : next y : next x
for x=41 to 43 : for y=13 to 16 : tiles(x,y)=1 : next y : next x
for x=35 to 37 : for y=27 to 30 : tiles(x,y)=3 : next y : next x

La détection de l'action à effectuer est mise à part pour éviter de ralentir le jeu, il y a souvent des actions identiques donc on attribue un numéro par action mais nous y reviendrons plus tard

` tableau des actions
` mis à part pour accélérer le jeu
dim actions(49,37)

` Pour l'exemple, j'ai mis la maison en bas à droite
for x=35 to 37 : for y=27 to 30 : actions(x,y)=1 : next y : next x

Le bitmap contient plusieurs image donc on sélectionne les 4 qui nous intéressent.

` charge le personnage dans 2,3,4,5
load image "alex.jpg",65535
paste image 65535,0,0
for y=0 to 3
get image y+2,0,y*32,24,(y+1)*32
next y
delete image 65535
face=4

On place le personnage

x_reel=32 : y_reel=32
x_ecran=32 : y_ecran=32

` boucle de départ
do

On mémorise les anciennes valeurs de x ou y_reel et x ou y_ecran. La valeur x_reel correspond à la place du personnage sur la carte tandis que x_ecran correspond à la place du personnage sur l'écran.

old_x_reel=x_reel : old_x_ecran=x_ecran
old_y_reel=y_reel : old_y_ecran=y_ecran

` déplacement perso
if upkey()=1 then face=2 : y_reel=y_reel-16 : y_ecran=y_ecran-16
if rightkey()=1 then face=3 : x_reel=x_reel+16 : x_ecran=x_ecran+16
if downkey()=1 then face=4 : y_reel=y_reel+16 : y_ecran=y_ecran+16
if leftkey()=1 then face=5 : x_reel=x_reel-16 : x_ecran=x_ecran-16

` empêche de sortir de la carte
if x_reel<32 then x_reel=32
if y_reel<32 then y_reel=32
if x_reel>752 then x_reel=752
if y_reel>552 then y_reel=552

Le scrolling est fait additionnant les coordonnées des réels et les coordonnées de de la carte. Si x_map+x_reel>608 (largeur écran-32) alors on décale la carte d'un tile

` scrolling
if x_map+x_reel>608 then x_map=x_map-16
if x_map+x_reel<32 then x_map=x_map+16
if y_map+y_reel>448 then y_map=y_map-16
if y_map+y_reel<32 then y_map=y_map+16

` empêche de sortir de l'écran
if x_ecran<32 then x_ecran=32
if y_ecran<32 then y_ecran=32
if x_ecran>592 then x_ecran=592
if y_ecran>432 then y_ecran=432

On mémorise le tile où se trouve le perso.

` détection des collisions ou des actions
x_tile_perso=int(x_reel/16)
y_tile_perso=int(y_reel/16)

Si le tile comporte une collision (tiles(x,y)=1) alors on replace le personnage à son ancienne position

if tiles(x_tile_perso,y_tile_perso)=1
x_reel=old_x_reel
y_reel=old_y_reel
x_ecran=old_x_ecran
y_ecran=old_y_ecran
endif

Si le tile comporte une action (tiles(x,y)=2) alors on va à la sélection des actions

if tiles(x_tile_perso,y_tile_perso)=2 then gosub selection_des_actions

Si le tile comporte une collision et une action (tiles(x,y)=1) alors on replace le personnage à son ancienne position et on va à la sélection des actions

if tiles(x_tile_perso,y_tile_perso)=3
x_reel=old_x_reel
y_reel=old_y_reel
x_ecran=old_x_ecran
y_ecran=old_y_ecran
gosub selection_des_actions
endif

` affichage de la carte puis du perso
cls
paste image 1,x_map,y_map
paste image face,x_ecran,y_ecran


sync
loop


Les actions sont souvent identiques mais il faut quand même savoir à quel tile elles ce sont passées donc il faut donner un numéro à chaque action et dans l'envoi de la fonction, dire à quel tile on était



` -------------------------------------------------------------------------
` Sélection des actions
` -------------------------------------------------------------------------

selection_des_actions:

if actions(x_tile_perso,y_tile_perso)=1 then eboulement(x_tile_perso,y_tile_perso)

return



` -------------------------------------------------------------------------
` Actions
` -------------------------------------------------------------------------


function eboulement(x_tile,y_tile)
print "Reculez !, la maison risque de s'écrouler"
wait 750
endfunction

 

Si vous voulez rajouter un commentaire sur ce qui est écrit, ce qui est écrit, demander l'ajout d'un nouveau style de jeu, ou en ajouter un vous même, allez dans la rubrique contacts

 http://www.oliv.fr.fm

© Oliv.fr.fm - Design de PourTaPageWeb (Visitez le site)