[Tutorial Blitz3D] : Utiliser un sprite comme curseur de souris/dessiner

Crystal Noir Message lu Posté le 12 Fév 2008 à 22:58 Bulle
Explorateur

Messages : 46
GCPoints : 15655
Oyez bienvenue dans ce second cours :) Ici nous allons apprendre à utiliser un sprite en guise de curseur de souris et nous allons voir qu'avec quelques fonctions simples on peut s'amuser :)

Vous pouvez télécharger la source complète en cliquant sur ce lien : http://crystalnoir.free.fr/Tutorials/Blitz3D/curseur.rar

Vous devez le télécharger car la source contient les images nécessaires au bon fonctionnement du tuto :)

Bien commençons. Demandez à blitz de vous ouvrir un document vierge et insérez les premières lignes de codes :


Citation :

;Curseur de souris simple avec un sprite

;On déclare les variables globales
Global Gomme
Global Noel



Ca commence, si vous êtes vraiment débutant déjà qu'est ce que c'est !

La commande Global vous permet de déclarer une variable qui sera utilisable globalement dans votre application. Nous avons vu dans le tutorial précédent que nous pouvions créer des fonctions pour rétrécir le code que nous insérons dans le programme principal. Si vous utilisez une variable non déclarée en Global dans une fonction Blitz fera une erreur comme quoi il ne connait pas la variable. En fait les variables déclarées dans une fonction sont locales, c'est à dire utilisable que dans cette fonction là, si vous lui assignez le type Global alors elle pourra être utilisée partout.

Pour rappel une variable sert à stocker des données (nombre, texte etc...)

Ici deux variables globales, Gomme et Noel, nous verrons plus loins à quoi elles vont nous servir.

Ajoutez ceci :


Citation :

;Création de la fenetre
Graphics 800,600,16,2
HidePointer()



Comme dans le tutorial précédent, nous créons notre fenêtre en 800 X 600 et en mode fenetré.

L'instruction HidePointer() permet de cacher le curseur de la souris, car nous, nous voulons utiliser un sprite en guise de pointeur !

Pas de question ? bah si vous en avez va falloir m'envoyer un MP car à l'heure où vous lirez ces lignes je serai surement en train de laver mon furet.

Trêves de plaisanteries, continuons plus loin :


Citation :

;Chargement de l'image de fond
Noel = LoadImage("pere.jpg")

;Chargement du curseur
Curseur = LoadImage("crayon.bmp")
MaskImage(Curseur,255,255,255)



Si vous avez fait le tutorial précédent, il y a du nouveau ici :)

LoadImage permet de charger en mémoire une image de votre choix, ici pere.jpg et ensuite crayon.bmp
L'image pere.jpg sera notre fond d'écran, alors que crayon.bmp sera le sprite que nous utiliserons en guise de curseur de souris.

La commande MaskImage permet de dire à blitz la couleur qui devra être transparente de cette image, ici c'est le blanc, si vous ouvrez l'image avec l'éditeur de votre choix, vous verrez que le fond de l'image est blanche et pour que ce soit esthétique, mieux vaut faire en sorte que ce fond blanc ne soit pas affiché à l'écran.

Respirez un bon coup, prenez une bouffée d'air, attention....on continue !


Citation :

;On crée la gomme
Gomme = CreateImage(5,5)
SetBuffer ImageBuffer(Gomme)
Rect(0,0,5,5,1)
SetBuffer BackBuffer()



Hou ca devient interessant là. Qu'avons nous là ? Je vous ai dit au départ qu'on peut s'amuser avec un curseur, ici je crée une gomme pour qu'on puisse avec notre crayon "effacer" l'image de fond que nous avons. Pour cela je crée une image qui n'existe pas en tant que tel. En effet, sur mon disque dur je n'ai pas d'image qui s'appelle Gomme, mais en fait nous allons dessiner directement notre gomme avec blitz.

L'instruction CreateImage permet de créer une image "virtuelle" d'une taille de 5 X 5

SetBuffer ImageBuffer(Gomme) ca vous rappelle rien ca ? Ha oui le Crysou nous a expliqué dans l'autre tuto ce que c'est que SetBuffer ! Et oui, dans l'autre tuto nous avons vu que le SetBuffer permettait de dire à blitz d'utiliser les buffers pour rafraichir l'écran et donc mettre à jour chaque évènement du programme à l'écran. Ici nous voulons pas dessiner sur l'écran mais sur l'image que nous venons de créer ! bah oui car CreateImage crée une image mais une image vide ! et là grâce à cette instruction nous allons pouvoir dessiner sur cette image.

L'instruction Rect dessine donc un rectangle blanc. Ensuite nous remettons le buffer en Backbuffer() pour faire comprendre à Blitz que maintenant il faut dessiner sur notre petit écran tout ce qu'on a fait et que l'image de la gomme est donc créée. Continuons :


Citation :

;Boucle Principale
Repeat
Cls
DrawImage(Noel,0,0)
DrawImage(Curseur,MouseX(),MouseY())
UpdateMouse()
Flip
Until KeyHit(1)



Et voici notre boucle principale. L'instruction Drawimage permet d'afficher à l'écran nos image en l'occurence, nous affichons Noel qui est en fait l'image pere.jpg et notre curseur à l'emplacement actuel de la souris sur l'écran grâce aux pointeurs MouseX() et MouseY().

Viens ensuite la fonction UpdateMouse() que nous allons créer tout de suite.

Après Until Keyhit(1) insérez ce code :


Citation :

Function UpdateMouse()
If MouseDown(1)
SetBuffer ImageBuffer(Noel)
DrawImage(Gomme,MouseX()+4,MouseY()+42)
EndIf
SetBuffer BackBuffer()
End Function



Voici notre fonction UpdateMouse() que nous utilisons dans le programme principal. L'instruction MouseDown(1) permet de tester si l'utilisateur clique sur le bouton gauche de la souris tout en laissant appuyé (donc sans relacher le bouton). Si c'est le cas, on paramètre le buffer sur l'image de fond pour pouvoir écrire dessus avec notre super crayon. L'instruction Drawimage dessine alors sur l'image de fond et à l'écran notre gomme ou plutot notre carré. Celui que nous avons créé tout à l'heure !

Et là c'est magique, l'image s'efface ! carrément fou cette histoire ! Vous aurez compris que ensuite il faut remettre le buffer à BackBuffer pour dire à Blitz de continuer ses prouesses sur l'écran et non plus l'image.

Si vous avez du mal à cerner SetBuffer, essayez d'enlever SetBuffer imageBuffer(Noel) dans la fonction et regardez ce qu'il change...Je vous laisse découvrir....

Après avoir appelé notre fonction dans la boucle principale, bien sur un Flip pour rafraichir tout ca !

Ce petit système est pratique pour créer des jeux ou applications où l'utilsateur doit dessiner quelque chose par exemple :)

Ci dessous, le code complet (sachant que vous avez la source à télécharger en haut de ce tutorial)


Citation :

;Curseur de souris simple avec un sprite

;On déclare les variables globales
Global Gomme
Global Noel

;Création de la fenetre
Graphics 800,600,16,2
HidePointer()

;Chargement de l'image de fond
Noel = LoadImage("pere.jpg")

;Chargement du curseur
Curseur = LoadImage("crayon.bmp")
MaskImage(Curseur,255,255,255)

;On crée la gomme
Gomme = CreateImage(5,5)
SetBuffer ImageBuffer(Gomme)
Rect(0,0,5,5,1)
SetBuffer BackBuffer()

;Boucle Principale
Repeat
Cls
DrawImage(Noel,0,0)
DrawImage(Curseur,MouseX(),MouseY())
UpdateMouse()
Flip
Until KeyHit(1)


Function UpdateMouse()
If MouseDown(1)
SetBuffer ImageBuffer(Noel)
DrawImage(Gomme,MouseX()+4,MouseY()+42)
EndIf
SetBuffer BackBuffer()
End Function

MageNoir Message lu Posté le 12 Fév 2008 à 23:10 Bulle
Avatar de MageNoir
Membre Avancé

Messages : 724
GCPoints : 16803
Hey, cool tout ces tutos, mais je pense que tu aurais du les ecrire en tant qu'article du site, enfin dans les tutos!
Pas en post de forum, tu vois quoi.


Je suppose que Mod va te faire la remarque.
*=*=* M@G€NO!R *=*=*
Crystal Noir Message lu Posté le 12 Fév 2008 à 23:18 Bulle
Explorateur

Messages : 46
GCPoints : 15655
T'inquietes pas j'ai eu le feu vert de Mod pour les poster ici :)
MageNoir Message lu Posté le 12 Fév 2008 à 23:23 Bulle
Avatar de MageNoir
Membre Avancé

Messages : 724
GCPoints : 16803
Okay Okay !
En tout cas, sympa tout ces tutos !
*=*=* M@G€NO!R *=*=*
Crystal Noir Message lu Posté le 12 Fév 2008 à 23:24 Bulle
Explorateur

Messages : 46
GCPoints : 15655
Merci :) j'ai posté ici justement pour les commentaires, c'est bon de pouvoir améliorer son style et ses didacticiels et surtout savoir si cela interesse.
Darktib Message lu Posté le 13 Fév 2008 à 21:31 Bulle
Avatar de Darktib
Membre Ultime

Messages : 4017
GCPoints : 347288
Tres sympa en tout cas^^
Meme si je n'ai pas Blitz3D :lol:

As tu mis ces tutoriels aussi dans la partie des tutos??

Crystal Noir Message lu Posté le 13 Fév 2008 à 22:43 Bulle
Explorateur

Messages : 46
GCPoints : 15655
ce sera fait par mod prochainement
Darktib Message lu Posté le 13 Fév 2008 à 22:50 Bulle
Avatar de Darktib
Membre Ultime

Messages : 4017
GCPoints : 347288
As tu testé DarkBASIC Pro?
Est - ce que déja tu pourrais me dire les differences entre PureBASIC et Blitz3D ? (comparaison tres succinte^^)
Crystal Noir Message lu Posté le 13 Fév 2008 à 23:12 Bulle
Explorateur

Messages : 46
GCPoints : 15655
oui j'ai testé DbPro.

La différence entre blitz3D et Purebasic c'est que Purebasic au départ est spécialisé dans la conception de jeux 2D et d'applications.

blitz3D lui dans les jeux 3D.

Avec Purebasic on peut également faire de la 3D grâce à Ogre mais je n'en suis pas vraiment spécialiste.

On reprochera à Blitz3D l'utilisation d'un directx plus qu'obsolète (directx 7-8).

Pour ce qui est de Dbpro, le langage reste simple mais pour un langage de conception de jeux 3D (ou 2D ca marche aussi), et tout comme Blitz3D, pour faire des levels il est bien d'avoir un soft pour cela (et encore investir lol) bien qu'il soit capable de charger des BSP (selon certaines limites). en revanche niveau code, il est simple et très intuitif. En plus il utilise directx 9 à merveille.

On lui reprochera par contre la bidouille qu'il faut faire pour le faire marcher sous vista (pas totalement compatible mais ca marche).
Darktib Message lu Posté le 14 Fév 2008 à 22:01 Bulle
Avatar de Darktib
Membre Ultime

Messages : 4017
GCPoints : 347288
Sous Vista vaut mieux utiliser GDK, qui est un wrapper Dbp en C++.

J'ai testé PB une fois, j'ai été agréablement surpris par son éditeur d'UI mais pas par sa partie 3D...

Les bsp sont a bannir de dbpro : le loader n'est plus a jour, et le format est trop limité. L'éditeur faut se le faire soi meme^^
Tout comme les *.3Ds^^

Merci du comparatif B3D et PB :grin:
Crystal Noir Message lu Posté le 14 Fév 2008 à 23:00 Bulle
Explorateur

Messages : 46
GCPoints : 15655
PB ne m' a jamais convaincu au niveau 3D mais faut dire qu'il utilise Ogre et non pas un moteur à lui.

Pure excelle en revanche dans tout ce qui est 2D et là ca pète tout, une fluidité et ergonomie incroyable. D'ailleurs si je devais comparer B3D avec Pure ya pas photo pure est bien plus fluide....

De plus Pb est portable (linux + amiga)...
Dernière édition le 14 Fév 2008 à 23:03
Mod Message lu Posté le 29 Juin 2008 à 11:58 Bulle
Avatar de Mod
Webmaster

Messages : 4954
GCPoints : 2100823
[Tutoriel ajouté au site] : Utiliser un sprite comme curseur de souris et pour dessiner
Répondre
GameCorp - Site d'apprentissage et d'entraide à la création de jeux vidéo.
XHTML Valid 1.1 - Page générée en 0.0403 secondes