AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  Connexion  

Partagez | 
 

 Menu en anneau

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Caly
Utilisateur confirmé: Rang ****
avatar

Messages : 1279
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.

MessageSujet: Menu en anneau   Sam 25 Mar 2017 - 23: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.
Revenir en haut Aller en bas
arthuro
Utilisateur confirmé: Rang ****
avatar

Messages : 1319
Localisation : Grenoble / Méribel
Projet Actuel : CBNA

MessageSujet: Re: Menu en anneau   Dim 26 Mar 2017 - 0: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.


_________________

D'autres jeux :
In The Cube
In the cube 2
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****
avatar

Messages : 1279
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.

MessageSujet: Re: Menu en anneau   Dim 26 Mar 2017 - 8: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.
Revenir en haut Aller en bas
arthuro
Utilisateur confirmé: Rang ****
avatar

Messages : 1319
Localisation : Grenoble / Méribel
Projet Actuel : CBNA

MessageSujet: Re: Menu en anneau   Dim 26 Mar 2017 - 9: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.

_________________

D'autres jeux :
In The Cube
In the cube 2
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****
avatar

Messages : 1279
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.

MessageSujet: Re: Menu en anneau   Dim 26 Mar 2017 - 10: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.
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****
avatar

Messages : 1279
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.

MessageSujet: Re: Menu en anneau   Dim 26 Mar 2017 - 10: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?
Revenir en haut Aller en bas
arthuro
Utilisateur confirmé: Rang ****
avatar

Messages : 1319
Localisation : Grenoble / Méribel
Projet Actuel : CBNA

MessageSujet: Re: Menu en anneau   Dim 26 Mar 2017 - 15: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!
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****
avatar

Messages : 1279
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.

MessageSujet: Re: Menu en anneau   Dim 26 Mar 2017 - 16: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 !!
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8886
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: Menu en anneau   Lun 27 Mar 2017 - 8: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.

_________________
                 
Revenir en haut Aller en bas
En ligne
Caly
Utilisateur confirmé: Rang ****
avatar

Messages : 1279
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.

MessageSujet: Re: Menu en anneau   Lun 27 Mar 2017 - 12: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 : http://cbna.forumactif.com/t11593-les-exemples-de-caly

Cependant si i tu as des retours d'optimisation des ressources je prends.

Merci à vous deux.
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8886
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: Menu en anneau   Lun 27 Mar 2017 - 13: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);

_________________
                 
Revenir en haut Aller en bas
En ligne
Contenu sponsorisé




MessageSujet: Re: Menu en anneau   

Revenir en haut Aller en bas
 
Menu en anneau
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» commande menu "Enregistrer"
» [resolu]mettre fichier dans le menu bar
» Menu création de variables
» [Résolu] Menu démarrer win xp (programmes en double)
» problème de menu déroulant

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Entraide confirmés-
Sauter vers: