| Scroll Bar [Résolu] | |
|
|
Auteur | Message |
---|
Victor000.1 Débutant
Messages : 23 Localisation : Picardie Projet Actuel : Little Lost Soul
| Sujet: Scroll Bar [Résolu] Sam 30 Juil 2016 - 18:09 | |
| Bonjour à tous, J'aurais besoin de votre aide car je suis en train de faire un système de scrolling caméra grâce à une slidebar pour un menu. Tout fonctionne correctement mis à part l'affichage qui à, selon moi, des problèmes de rafraîchissement au niveau de la position de la barre et du slide. Je ne sais pas du tout à quoi ils sont dû en réalité. Voilà le lien du projet J'ai essayé de le cleaner un maximum et de mettre le plus d'indication possible, Mais si vous avez besoin d'autres informations n'hésitez pas. D'avance merci
Dernière édition par Victor000.1 le Mer 3 Aoû 2016 - 19:27, édité 1 fois |
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Scroll Bar [Résolu] Mar 2 Aoû 2016 - 21:55 | |
| Salut, j'ai pas GM:S sous la main mais si tu pouvais poster directement quelques scripts concernés, peut être que je verrais ce qui cloche avec un peu de chance :p
|
|
| |
Victor000.1 Débutant
Messages : 23 Localisation : Picardie Projet Actuel : Little Lost Soul
| Sujet: Re: Scroll Bar [Résolu] Mer 3 Aoû 2016 - 14:02 | |
| Pas de problèmes ! Il y a assez peu de chose donc je vais tout mettre Ici on peut voir qu'il y as des sautes dans l'affichage de la barre et de du slide. Mon obj_bar : - Code:
-
// Step Event //
key_press = mouse_check_button(mb_left);
// Refresh bar position //
offset_x = view_wview - 48; offset_y = view_hview /2;
x = view_xview + offset_x; y = view_yview + offset_y;
tLimit = y-(barH/2)+8; // Je laisse une marge de 8 pixel au dessus et en dessous de la barre pour dessiner une flèche plus tard bLimit = y+(barH/2)-8;
// J'initialise tLimit et bLimit sur mon obj_slider
slider.tLimit = tLimit; slider.bLimit = bLimit;
// Check if grab
if (key_press) { grab = true; } else { grab = false; }
// Check the slider position
if grab {
// Si la position de la souris est comprise entre tLimit et bLimit la position du slider est modifié
if (mouse_y < bLimit) && (mouse_y > tLimit) { slider.y = mouse_y;
// Si la position de la souris est sup ou inf aux limites, la position du slider est égale aux limites
} else if mouse_y > bLimit { slider.y = bLimit; } else if mouse_y < tLimit { slider.y = tLimit; } }
// Draw Event //
draw_set_color(c_white); draw_line(x, y - (barH/2),x,y +(barH/2));
Mon obj_slider (J'utilise un sprite pour le slider) : - Code:
-
// step Event //
// je rend la position du slider sur la barre en pourcentage
posPercent = (y - bLimit ) / (tLimit - bLimit) * 100; posPercent = round(posPercent);
// j'applique le précédent pourcentage pour obtenir la position réelle de la caméra par rapport à ma room.
camy = room_height - (room_height/100) * posPercent;
obj_cam.y = round(camy);
En tout cas je te remercie |
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Scroll Bar [Résolu] Mer 3 Aoû 2016 - 14:30 | |
| Je note petit a petit les choses que je vois qui méritent quelques améliorations ("utiles" ou non): - Code:
-
if (key_press) { grab = true; } else { grab = false; }
Est identique a écrire: grab = key_press; ce qui est bien plus simple et concis. Il est inutile de séparer l'objet slider et l'objet barre. Cela rend les choses plus compliquées. - Code:
-
posPercent = (y - bLimit ) / (tLimit - bLimit) * 100; posPercent = round(posPercent);
// j'applique le précédent pourcentage pour obtenir la position réelle de la caméra par rapport à ma room.
camy = room_height - (room_height/100) * posPercent;
obj_cam.y = round(camy);
Je ne comprend pas pourquoi tu multiplie la valeur de la première ligne par 100, pour ensuite faire un round, pour ensuite diviser par 100. Il vaut mieux tout simplement faire: - Code:
-
pos_percent = (y - bLimit ) / (tLimit - bLimit) obj_cam.y = room_height * (1 - posPercent); Le décalage de la barre proviens peut être aussi du fait que tu utilises le step event, et non pas le begin step event. Sinon le reste me semble assez cohérent, même si assez "long" pour pas grand chose :p |
|
| |
Victor000.1 Débutant
Messages : 23 Localisation : Picardie Projet Actuel : Little Lost Soul
| Sujet: Re: Scroll Bar [Résolu] Mer 3 Aoû 2016 - 16:52 | |
| Haha, oui, j'ai pas encore une logique algorithmique très développé et j'ai encore du mal à simplifié mon code ^^ J'ai effectué les modifications que tu m'as donné (sauf que ce n'était pas dans le "begin step" mais dans le "end step"). Du coup, ça me donne ça : J'ai donc toujours les sautes sur l'affichage du Slider. Le code donne donc ça désormais : // Create Event // - Code:
-
// Create Event //
// Bar Position offset_x = view_wview - 48; offset_y = view_hview /2;
x = view_xview + offset_x; y = view_yview + offset_y;
// Bar Length barH = 160; barW = 4;
// Bar Limit tLimit = y-(barH/2)+8; bLimit = y+(barH/2)-8;
// Other grab = false; posPercent = 0;
// Init Slider // slider_y = tLimit; slider_x = x; slider_w = 8; slider_h = 4; // Step Event // - Code:
-
// Step Event //
key_press = mouse_check_button(mb_left);
// Check if grab
grab = key_press;
// Check the slider position
if grab {
if (mouse_y < bLimit) && (mouse_y > tLimit) { slider_y = mouse_y; } else if mouse_y > bLimit { slider_y = bLimit; } else if mouse_y < tLimit { slider_y = tLimit; } }
// Calculate Slider percentage Position %
posPercent = (slider_y - bLimit ) / (tLimit - bLimit); obj_cam.y = room_height * (1 - posPercent);
//End Step Event// - Code:
-
//End Step Event//
// Refresh positions //
offset_x = view_wview - 48; offset_y = view_hview /2;
x = view_xview + offset_x; y = view_yview + offset_y;
tLimit = y-(barH/2)+8; bLimit = y+(barH/2)-8; // Draw Event // - Code:
-
// Draw Event //
draw_set_color(c_white);
// Barre draw_line(x, y - (barH/2),x,y +(barH/2));
// Slider draw_rectangle(slider_x - (slider_w/2), slider_y - (slider_h/2), slider_x + (slider_w/2), slider_y + (slider_h/2), true);
En tout cas, merci, ça m'as déjà bien avancé |
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Scroll Bar [Résolu] Mer 3 Aoû 2016 - 19:02 | |
| Ça fait toujours beaucoup de code pour une opération aussi simple :p Vais tenter de te bricoler un truc en 2 minutes.
|
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Scroll Bar [Résolu] Mer 3 Aoû 2016 - 19:17 | |
| http://wyvup.com/?c=A2rMuqXSlider: #Create - Code:
-
cursor_factor = 0 #End Step - Code:
-
obj_camera.y = room_height * cursor_factor #Draw - Code:
-
slider_height = 128
if(mouse_check_button(mb_left)) { my = mouse_y dy = my - (view_yview[0] + (view_hview[0] - slider_height)/2) cursor_factor = dy / slider_height cursor_factor = min(1, max(0, cursor_factor)) }
draw_line(view_xview[0] + view_wview[0] - 32, view_yview[0] + (view_hview[0] - slider_height)/2, view_xview[0] + view_wview[0] - 32, view_yview[0] + (view_hview[0] + slider_height)/2)
draw_rectangle(view_xview[0] + view_wview[0] - 32 - 8, view_yview[0] + (view_hview[0] - slider_height)/2 - 8 + cursor_factor * slider_height, view_xview[0] + view_wview[0] - 32 + 8, view_yview[0] + (view_hview[0] - slider_height)/2 + 8 + cursor_factor * slider_height, true) |
|
| |
Victor000.1 Débutant
Messages : 23 Localisation : Picardie Projet Actuel : Little Lost Soul
| Sujet: Re: Scroll Bar [Résolu] Mer 3 Aoû 2016 - 19:26 | |
| - onilink_ a écrit:
- Ça fait toujours beaucoup de code pour une opération aussi simple :p
haha, je vois la différence en effet xD Merci beaucoup en tout cas ! C'est super gentil à toi. ça fonctionne nickel |
|
| |
Contenu sponsorisé
| Sujet: Re: Scroll Bar [Résolu] | |
| |
|
| |
| Scroll Bar [Résolu] | |
|