Action Bouton !!!

Pekele Message lu Posté le 21 Juil 2009 à 22:42 Bulle
Membre Novice

Messages : 42
GCPoints : 14425
j'ai fouillé les forums pour trouver une solution pour faire des boutons avec clics souris ou touche clavier ...

les codes sont fastidieux, difficile à comprendre pour moi ...
j'ai trouvé des codes bien différents les un des autres...

je ne me sent pas de créer un code pareil pour le moment....
n'y a t'il pas de solutions plus simple ?
comme par exemple une image cliquable comme dans le Htlm ?
voir un texte cliquable ? (je préfère la 1ere solution)

avec un code compréhensible pour débutant ?

si vous avez un exemple ce serait bien sympa :p

merci
Pekele
freemaul Message lu Posté le 21 Juil 2009 à 23:09 Bulle
Avatar de freemaul
Explorateur

Messages : 174
GCPoints : 50213
Il n'y a pas de fonction pour faire des boutons avec 3dgc ^^.
Il faut les faire "à la main", voilà pourquoi tu trouve moult codes différents.

Mais commence par faire un truc simple, tu amélioreras ensuite.

Tout d'abords un bouton c'est quoi ?
on va dire que c'est 2 images, une en mode "repos", une quand on clique dessus.
Le dit bouton doit ensuite exécuter une action si on clique dessus.

De quoi a tu besoin :
Savoir utiliser les images (voir bitmap, image, et sprite)
Savoir récupéré la position de la sourie et celle du bouton pour savoir si le curseur est sur le bouton ou non. (voir mouse)
Savoir si le bouton gauche de la sourie est appuyé ou non (voir mouse)


Essai de faire un petit algo par exemple avant de te lancer. Et si tu est toujours perdus, j'essaierais de t'aider plus ;)
"La vie n'a pas de prix, mais elle coûte chère"
Pekele Message lu Posté le 21 Juil 2009 à 23:42 Bulle
Membre Novice

Messages : 42
GCPoints : 14425
Merci Freemaul :)

je vais essayer de voir si je comprend ça en scruptant les codes que j'ai !

je comprend mieux le principe avec ton détail....

je m'essaye, et je te tient au courant !
MageNoir Message lu Posté le 22 Juil 2009 à 11:40 Bulle
Avatar de MageNoir
Membre Avancé

Messages : 724
GCPoints : 16803
Et après hop, tu te fais une fonction ce qui évite de réécrire tout le code à chaque boutons.
*=*=* M@G€NO!R *=*=*
corwin Message lu Posté le 22 Juil 2009 à 18:39 Bulle
Avatar de corwin
Membre Confirmé

Messages : 459
GCPoints : 63647
Alors voila j'ai fait sa en 5 min. Il y a 2 fonction, une pour créer les boutons et l'autre pour faire l'action des boutons.
fonctions :
Code :
function bouton(numsprite1,numsprite2,numsprite3,numtext,x#,y#,taillex#,tailley#,text$,size#)
rem bouton voyan
box x#,y#,taillex#,tailley#,RGB(255,0,0),RGB(255,0,0),RGB(255,0,0),RGB(255,0,0)
get image numsprite1,x#,y#,taillex#,tailley#
sprite numsprite1,x#,y#,numsprite1
hide sprite numsprite1
cls
rem bouton selection
box x#,y#,taillex#,tailley#,RGB(128,255,0),RGB(128,255,0),RGB(128,255,0),RGB(128,255,0)
get image numsprite2,x#,y#,taillex#,tailley#
sprite numsprite2,x#,y#,numsprite2
hide sprite numsprite2
cls
rem bouton clic
box x#,y#,taillex#,tailley#,RGB(0,0,255),RGB(0,0,255),RGB(0,0,255),RGB(0,0,255)
get image numsprite3,x#,y#,taillex#,tailley#
sprite numsprite3,x#,y#,numsprite3
hide sprite numsprite3
cls
rem texte dans bouton
set text size size#
center text screen width()/2,screen height()/2,text$
get image numtext,0,0,screen width(),screen height()
sprite numtext,0,0,numtext
sprite numtext,(sprite x(numsprite1)+sprite width(numsprite1)/2-screen width()/2),(sprite y(numsprite1)+sprite height(numsprite1)/2-screen height()/2),numtext
cls
show sprite numsprite1
endfunction

function boutonclic(numsprite1,numsprite2,numsprite3)
if mousex()>=sprite x(numsprite1) and mousex()<=(sprite x(numsprite1)+sprite width(numsprite1))
   if mousey()>=sprite y(numsprite1) and mousey()<=(sprite y(numsprite1)+sprite height(numsprite1))
      show sprite numsprite2
         if mouseclick()=1
            show sprite numsprite3
         else
            hide sprite numsprite3
         endif
   endif
else
   hide sprite numsprite2
endif
endfunction


et un petit exemple :
Code :
set display mode 1280,1024,32
color backdrop 0
bouton(1,2,3,4,200,200,400,400,"blabla",40)

do

boutonclic(1,2,3)

loop

function bouton(numsprite1,numsprite2,numsprite3,numtext,x#,y#,taillex#,tailley#,text$,size#)
rem bouton voyan
box x#,y#,taillex#,tailley#,RGB(255,0,0),RGB(255,0,0),RGB(255,0,0),RGB(255,0,0)
get image numsprite1,x#,y#,taillex#,tailley#
sprite numsprite1,x#,y#,numsprite1
hide sprite numsprite1
cls
rem bouton selection
box x#,y#,taillex#,tailley#,RGB(128,255,0),RGB(128,255,0),RGB(128,255,0),RGB(128,255,0)
get image numsprite2,x#,y#,taillex#,tailley#
sprite numsprite2,x#,y#,numsprite2
hide sprite numsprite2
cls
rem bouton clic
box x#,y#,taillex#,tailley#,RGB(0,0,255),RGB(0,0,255),RGB(0,0,255),RGB(0,0,255)
get image numsprite3,x#,y#,taillex#,tailley#
sprite numsprite3,x#,y#,numsprite3
hide sprite numsprite3
cls
rem texte dans bouton
set text size size#
center text screen width()/2,screen height()/2,text$
get image numtext,0,0,screen width(),screen height()
sprite numtext,0,0,numtext
sprite numtext,(sprite x(numsprite1)+sprite width(numsprite1)/2-screen width()/2),(sprite y(numsprite1)+sprite height(numsprite1)/2-screen height()/2),numtext
cls
show sprite numsprite1
endfunction

function boutonclic(numsprite1,numsprite2,numsprite3)
if mousex()>=sprite x(numsprite1) and mousex()<=(sprite x(numsprite1)+sprite width(numsprite1))
   if mousey()>=sprite y(numsprite1) and mousey()<=(sprite y(numsprite1)+sprite height(numsprite1))
      show sprite numsprite2
         if mouseclick()=1
            show sprite numsprite3
         else
            hide sprite numsprite3
         endif
   endif
else
   hide sprite numsprite2
endif
endfunction
Darktib Message lu Posté le 22 Juil 2009 à 21:54 Bulle
Avatar de Darktib
Membre Ultime

Messages : 4017
GCPoints : 347288
L'algo est très simple:

tu regarde si la position de la souris est dans le rectangle qui délimite le bouton (que des maths)
Si oui: si la souris est cliquée, tu affiche la deuxieme image et tu effectue une action
Si non: tu affiche simplement la première image.

Tout ca me rappelle qu'il faut que j'avance mon tuto sur la gui...
Pekele Message lu Posté le 22 Juil 2009 à 22:31 Bulle
Membre Novice

Messages : 42
GCPoints : 14425
Corwin ?
tu es né dedans ???
bravo et merci pour ton code !!!
je le déchiffre depuis un moment, en me posant tout un tas de questions lol...

j'aurais été incapable d'écrire un code comme ça...
je le déchiffre, mais je suis loin d'avoir la logique pour l'écrire ...

donc, si tu veux bien, explique moi le principe...

Spoiler - Cliquez pour afficher
set display mode 1280,1024,32
color backdrop 0

bouton (1,2,3,4,5,5,200,50,"blabla",20)
` "1,2,3,4" c'est quelle valeurs exactement ? ça représente quoi ?

do
boutonclic(1,2,3)
` le bouton a 3 fonctions définies plus bas...
loop

` là...ca se complique ....
function bouton(numsprite1,numsprite2,numsprite3,numtext,x#,y#,taillex#,tailley#,text$,size#)
` tu définis 3 sprite, (affichage, survole, clic)
` le sprite texte,
` les valeurs X et Y sont la position donné en ligne 3,
` la taille X et Y défini en ligne 3 aussi,
` le texte à afficher et sa taille !
` les # appliquent les valeurs définies en ligne 3

rem bouton voyan
box x#,y#,taillex#,tailley#,RGB(255,0,0),RGB(255,0,0),RGB(255,0,0),RGB(255,0,0)
` tu stipules que la boite fera réference aux données de la ligne 3,(position et grandeur)
` et tu définis la couleur...
` es tu obligé de répéter 4 fois ",RGB(255,0,0)" ??? pourquoi ?




` là !!! j'ai du mal comprendre le principe !!!
get image numsprite1,x#,y#,taillex#,tailley#
sprite numsprite1,x#,y#,numsprite1
hide sprite numsprite1
cls


merci encore !
après avoir compris je tenterais de le faire moi même....


freemaul Message lu Posté le 22 Juil 2009 à 22:58 Bulle
Avatar de freemaul
Explorateur

Messages : 174
GCPoints : 50213
Personnellement je te conseillerais d'essayer d'abords de te faire un code à toi, même très simple.
Et ensuite de regarder comment on fait les autres (sauf si vraiment tu sèche pendant trop longtemps, là il faudra bien aller voir comment se sont débrouiller les autres).

Mais copier coller des codes d'autres personnes et d'essayer de les comprendre n'est pas la meilleur solution pour apprendre.
Tout d'abords tu va souvent croire savoir comment marche le code copier, alors que bien souvent tu seras à coté de la plaque (ça m'ai arriver bien souvent...). Alors que te casser les dents à faire toi même les chose tu comprendras exactement ce que fait chaque ligne de code.
Et ensuite tu pourras lire les autres codes et te dire "ha oui, et si je faisais comme ça, ce serais surement mieux..."
"La vie n'a pas de prix, mais elle coûte chère"
Pekele Message lu Posté le 22 Juil 2009 à 23:14 Bulle
Membre Novice

Messages : 42
GCPoints : 14425
Freemaul,
je comprend tout a fait tes dires...
c'est ma langue natale , et elle , je la comprend bien ...

je ne copie pas, j'essaye juste de comprendre car je n'ai aucune reférences pour m'aider...

je vais donc suivre tes conseils plus haut...
et me tester seul ....
j'espère arriver à mes fins...

je te montrerais ça après .

Pekele

freemaul Message lu Posté le 22 Juil 2009 à 23:27 Bulle
Avatar de freemaul
Explorateur

Messages : 174
GCPoints : 50213

Citation :


Freemaul,
je comprend tout a fait tes dires...
c'est ma langue natale , et elle , je la comprend bien ...

je ne copie pas, j'essaye juste de comprendre car je n'ai aucune reférences pour m'aider...


A vrai dire mes propos était plutôt à destination de corwin qui ta balance un code assez complet (trop pour un débutant).
Mais maintenant que le code est là n'hésite bien sûr pas à regarder comment il utilise les différentes fonctions, même si tu ne comprend pas tout.


Si tu suis l'algorithme de Darktib tu devrais arriver à un code de quelques lignes. On pourras ensuite te conseiller des améliorations, et je pense qu'à ce moment là tu pourras aisément comprendre le code de corwin.
"La vie n'a pas de prix, mais elle coûte chère"
Pekele Message lu Posté le 23 Juil 2009 à 00:43 Bulle
Membre Novice

Messages : 42
GCPoints : 14425
voila ...
j'ai fait moi même comme ça me venais à la tête logiquement ...
je n'arrive pas à trouver la ligne de commande pour faire fonctionner tout ça....

je vois uniquement mon image 2 !!! ( ce qui est déjà bien pour moi :p )

j'ai du mal sur les ligne " mousex()>=, mousey()>= ....
quelle est la logique à suivre ?

ceci est le fruit de mon imagination ...
je n'ai suivi aucun tuto pour en arriver là ....

heureusement d'ailleurs :p
Pekele Message lu Posté le 23 Juil 2009 à 00:43 Bulle
Membre Novice

Messages : 42
GCPoints : 14425
set display mode 800,600,32
color backdrop 0

load image "bouton-1a.jpg" ,1
load image "bouton-1b.jpg" ,2

sprite 1,50,50,1
sprite 2,50,50,2
hide sprite 2

if mousex()>=sprite x(1)
if mousey()>=sprite y(1)

show sprite 2
else
show sprite 1
endif
endif

do
loop
freemaul Message lu Posté le 23 Juil 2009 à 08:28 Bulle
Avatar de freemaul
Explorateur

Messages : 174
GCPoints : 50213
Code :
if mousex()>=sprite x(1)
if mousey()>=sprite y(1)

show sprite 2
else
show sprite 1
endif
endif

ces test là doivent être éxécuter tout le temps, donc il faut le mettre dans ta boucle :
Code :
do
  if mousex()>=sprite x(1)
  if mousey()>=sprite y(1)
    show sprite 2
  else
    show sprite 1
  endif
  endif
loop
"La vie n'a pas de prix, mais elle coûte chère"
corwin Message lu Posté le 23 Juil 2009 à 10:49 Bulle
Avatar de corwin
Membre Confirmé

Messages : 459
GCPoints : 63647
remplacer sa : Code :
if mousex()>=sprite x(1)
if mousey()>=sprite y(1)


par sa : Code :
if mousex()>=sprite x(1) and mousex()<=sprite x(1)+sprite width(1)
if mousey()>=sprite y(1) and mousey()<=sprite y(1)+sprite height(1)


j'explique : toi tu disais juste la position en haut a gauche du sprite mais il faut rajouter la limite en bas a gauche du sprite alors je dit que la limite doit etre a la position x du sprite ("sprite x(1)") jusqu'à la position x plus la taille du sprite ("sprite x(1)+sprite width(1)"). et je fait pareil pour y. :)

Code :
set display mode 800,600,32
color backdrop 0

load image "bouton-1a.jpg" ,1
load image "bouton-1b.jpg" ,2

sprite 1,50,50,1
sprite 2,50,50,2
hide sprite 2

do

if mousex()>=sprite x(1) and mousex()<=sprite x(1)+sprite width(1)
if mousey()>=sprite y(1) and mousey()<=sprite y(1)+sprite height(1)

show sprite 2
else
show sprite 1
endif
endif

loop
freemaul Message lu Posté le 23 Juil 2009 à 11:41 Bulle
Avatar de freemaul
Explorateur

Messages : 174
GCPoints : 50213
Effectivement je n'y avais même pas porté attention ^^

Il faut aussi rajouter le test du bouton gauche de la sourie pressé ou non.
Ensuite quand tu fait un "show sprite", ne pas oublié de faire un "hide sprite" sur l'autre ^^

J'espère qu'on ne t'assomme pas trop de modifications d'un coup ^^
"La vie n'a pas de prix, mais elle coûte chère"
corwin Message lu Posté le 23 Juil 2009 à 11:48 Bulle
Avatar de corwin
Membre Confirmé

Messages : 459
GCPoints : 63647
J'avais pas non plus fait attention a ses dernier détails ^^ Voila essaye de faire sa :)
Pekele Message lu Posté le 23 Juil 2009 à 12:10 Bulle
Membre Novice

Messages : 42
GCPoints : 14425
Corwin ....


Citation :

if mousex()>=sprite x(1) and mousex()<=sprite x(1)+sprite width(1)
if mousey()>=sprite y(1) and mousey()<=sprite y(1)+sprite height(1)



j'ai essayé ça hier....j'en suis sur !!!
j'avais donc pensé la chose correctement...

mais il me dit erreur sur "and mousex()"
certainement une erreur que je ne voyais pas :/
puis je ne l'avais pas mis dans la boucle ....donc .....

je n'ai pas réussi ... j'ai abandonné assez tard hier !!!


je vais voir ça de suite ....

Pekele
Pekele Message lu Posté le 23 Juil 2009 à 13:30 Bulle
Membre Novice

Messages : 42
GCPoints : 14425
merci pour vos explication ...
je comprend mieux !

j'ai donc rectifié mon code;

Spoiler - Cliquez pour afficher
set display mode 800,600,32
color backdrop 0

load image "bouton-1a.jpg" ,1
load image "bouton-1b.jpg" ,2

sprite 1,50,50,1
sprite 2,50,50,2
hide sprite 1
hide sprite 2


do
if mousex()>=sprite x(1) and mousex()<=sprite x(1)+sprite width(1)
if mousey()>=sprite y(1) and mousey()<=sprite y(1)+sprite height(1)
show sprite 2
hide sprite 1
else
show sprite 1
hide sprite 2
endif
endif
loop


je vais essayer de mettre des variables aux positions maintenant :)
Pekele Message lu Posté le 23 Juil 2009 à 13:44 Bulle
Membre Novice

Messages : 42
GCPoints : 14425
Ca a l'aire de fonctionner :p
Spoiler - Cliquez pour afficher

set display mode 800,600,32
color backdrop 0

load image "bouton-1a.jpg" ,1
load image "bouton-1b.jpg" ,2

sprite 1,50,50,1
sprite 2,50,50,2
hide sprite 1
hide sprite 2

X#=sprite x(1)
Y#=sprite y(1)

do
if mousex()>=X# and mousex()<=X#+sprite width(1)
if mousey()>=Y# and mousey()<=Y#+sprite height(1)
show sprite 2
hide sprite 1
else
show sprite 1
hide sprite 2
endif
endif
loop


je vais essayer de mettre la fonction clic :p
corwin Message lu Posté le 23 Juil 2009 à 13:48 Bulle
Avatar de corwin
Membre Confirmé

Messages : 459
GCPoints : 63647
Bon boulot :)
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.0564 secondes