| Menu en anneau | |
|
|
Auteur | Message |
---|
Caly Utilisateur confirmé: Rang ****
Messages : 1285 Localisation : Haute Normandie Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.
| Sujet: Menu en anneau Dim 26 Mar 2017 - 0:48 | |
| Bonjour.
Quelqu'un aurait il déjà codé un menu en anneau du genre "secret of mana" avec une organisation des positions porportionelles celon le nombre d'items disponibles?
Si oui, serait il possible de partager votre code, si non, avais vous une idée de la trame à suivre ?
Merci. |
|
| |
arthuro Utilisateur confirmé: Rang ****
Messages : 1483 Localisation : Paris Projet Actuel : Diagon https://arthursonzogni.com/Diagon
| Sujet: Re: Menu en anneau Dim 26 Mar 2017 - 1:37 | |
| Tu veux le faire avec Game Maker? L'anneau est bien contenu dans le plan de l'écran? Tu te pose des questions sur quoi? Comment placer les items sur l'anneau, comment faire les animations, ...
Je vais essayer pour commencer à te donner la première réponse qui me vient. J'ai conscience que c'est sans doute pas ce que tu cherchais:
La position (x,y) du i-ème objet sur un total de n. x = r * cos(2pi * i/n) y = r * sin(2pi * i/n)
avec r une constante.
Ensuite, tu peux vouloir augmenter r en fonction de n. Plus il y a d'élément dans le cercle, plus il augmente de rayon.
r = max(r_min, n*c) avec c une constante à choisir.
|
|
| |
Caly Utilisateur confirmé: Rang ****
Messages : 1285 Localisation : Haute Normandie Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.
| Sujet: Re: Menu en anneau Dim 26 Mar 2017 - 10:40 | |
| Salut arthuro.
Oui pour le moment je fait une maquette avec GM et je pense finaliser la chose en C++ quant tout sera en place.
Et merci pour les formules de positions c'était vraiment ça que j'avais du mal à calculer.
Je suis en w-e et je n'ai pas de quoi tester ça avant demain soir.
Je me pose une question sur tes formules que je ne comprend pas mathématiquement. Sur un plan horaire si j'ai 4 items ils se placeront en 0 15 30 45 ?
Si je rejoute un item il se placera tout seul en déplaçant les autres pour un placement régulier ? Genre 0 10 25 35 50 (grosso modo) ?
Merci pour ton aide j'ai toujours eu du mal sur ce genre de calcul scientifique.
|
|
| |
arthuro Utilisateur confirmé: Rang ****
Messages : 1483 Localisation : Paris Projet Actuel : Diagon https://arthursonzogni.com/Diagon
| Sujet: Re: Menu en anneau Dim 26 Mar 2017 - 11:49 | |
| Pour répondre à tes questions, oui!
Fn faite, le point en cos(a), sin(a) va parcourir un cercle de rayon 1 de manière uniforme. Il va faire un tour pour a allant de 0 à 2pi. Donc si a = 2*pi * i / n, c'est comme si tu coupait ton cercle en n part et que tu allais à la i-ème. |
|
| |
Caly Utilisateur confirmé: Rang ****
Messages : 1285 Localisation : Haute Normandie Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.
| Sujet: Re: Menu en anneau Dim 26 Mar 2017 - 12:08 | |
| Merci !!
Je teste tout ça dés que je le peux. Tu m’enlève une épine du pied, jamais je n'aurais trouvé cette formule par moi même.
Merci. |
|
| |
Caly Utilisateur confirmé: Rang ****
Messages : 1285 Localisation : Haute Normandie Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.
| Sujet: Re: Menu en anneau Dim 26 Mar 2017 - 12:35 | |
| Yho j'ai réussi à choper GM ici. Voici je que j'ai fait dans un draw. - Code:
-
//Initialisation if( !variable_local_exists( "init" ) ){ n = 4; r = 50; draw_set_color(c_red); init = true; }
//Augmenter/reduire le nombre d'items. n += keyboard_check_pressed(vk_up) - keyboard_check_pressed(vk_down); n = max(n,1); //Afficher le nbr d'items. draw_text(10,10,n);
//Affiche le ring-menu for( i=0; i<n; i+=1 ){
x = r * cos( (2*pi) * i/n); y = r * sin( (2*pi) * i/n); x+=150; y+=150; draw_rectangle(x,y,x+5,y+5, false);
}
Ca marche nickel !! Juste un truc, l'item fixe est celui en horaire 15 et j'aimerais qu'il soit en horaire 0. Saurais tu le truc à changer? |
|
| |
arthuro Utilisateur confirmé: Rang ****
Messages : 1483 Localisation : Paris Projet Actuel : Diagon https://arthursonzogni.com/Diagon
| Sujet: Re: Menu en anneau Dim 26 Mar 2017 - 17:57 | |
| Oui, il suffit de tourner d'un quart de tour.
x = r * cos ( 2 * pi * ( i/n + 1.0/4.0)) y = r * sin ( 2 * pi * ( i/n + 1.0/4.0))
Super si ça fonctionne dans ton jeu! |
|
| |
Caly Utilisateur confirmé: Rang ****
Messages : 1285 Localisation : Haute Normandie Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.
| Sujet: Re: Menu en anneau Dim 26 Mar 2017 - 18:21 | |
| Un grand merci.
Sur ce coup là tu m'impressionne sur ta connaissance mathématique.
Je posterais le gmk finis avec l'animation et un exemple concret pour ceux que ca intéresse.
Encore une fois merci pour les formules !! |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Menu en anneau Lun 27 Mar 2017 - 10:27 | |
| Juste pour info, t'as lengthdir_x(r, angle_deg) et y qui sont l'équivalent de cos( degtorad(a) ) * r sous GM. C'est bête j'avais fait un menu comme ça y a des années, mais j'ai perdu le gmd :p Sinon, ta marche a suivre est étrange, en général quand on veut afficher des "objets" en coordonnées polaires, on utilise (x,y) comme centre. Bref, un code d'affichage très simple de N objets autour d'un centre (draw event): - Code:
-
n = 6 r = 80
for(i=0; i<n; i+=1) { xx = lengthdir_x(r, i * 360 / n) yy = lengthdir_y(r, i * 360 / n) draw_circle(x + xx, y + yy, 8, true) } Plus qu'a faire un peu d'algo pour gérer la rotation du menu, mais je te rassure c'est très simple. |
|
| |
Caly Utilisateur confirmé: Rang ****
Messages : 1285 Localisation : Haute Normandie Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.
| Sujet: Re: Menu en anneau Lun 27 Mar 2017 - 14:53 | |
| Merci Oni. Javais déjà codé 90% du code en utilisant la formule d'Arthuro qui fonctionne nickel quant j'ai vus ton post. J'ai finis l'anneau et j'ai posté le .gmk : https://cbna.forumactif.com/t11593-les-exemples-de-calyCependant si i tu as des retours d'optimisation des ressources je prends. Merci à vous deux. |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Menu en anneau Lun 27 Mar 2017 - 15:09 | |
| Ça changera pas grand chose niveau perfs mais c'est sensé être plus simple a lire pour les utilisateurs de GM: - Code:
-
angle = 360 * (i/n + pos_selector + rot_value*rot_direction); xx = x + lengthdir_x(r, angle); yy = y - lengthdir_y(r, angle); |
|
| |
Contenu sponsorisé
| Sujet: Re: Menu en anneau | |
| |
|
| |
| Menu en anneau | |
|