AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  Connexion  

Partagez | 
 

 Scroll Bar [Résolu]

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Victor000.1
Débutant
avatar

Messages : 23
Localisation : Picardie
Projet Actuel : Little Lost Soul

MessageSujet: 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  happy1


Dernière édition par Victor000.1 le Mer 3 Aoû 2016 - 19:27, édité 1 fois
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

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

MessageSujet: 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

_________________
                 
Revenir en haut Aller en bas
Victor000.1
Débutant
avatar

Messages : 23
Localisation : Picardie
Projet Actuel : Little Lost Soul

MessageSujet: 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 Smile

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 Smile
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

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

MessageSujet: 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

_________________
                 
Revenir en haut Aller en bas
Victor000.1
Débutant
avatar

Messages : 23
Localisation : Picardie
Projet Actuel : Little Lost Soul

MessageSujet: 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é Very Happy
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

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

MessageSujet: 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.


_________________
                 
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

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

MessageSujet: Re: Scroll Bar [Résolu]   Mer 3 Aoû 2016 - 19:17

http://wyvup.com/?c=A2rMuqX

Slider:

#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)

_________________
                 
Revenir en haut Aller en bas
Victor000.1
Débutant
avatar

Messages : 23
Localisation : Picardie
Projet Actuel : Little Lost Soul

MessageSujet: 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 Very Happy
Revenir en haut Aller en bas
Contenu sponsorisé




MessageSujet: Re: Scroll Bar [Résolu]   

Revenir en haut Aller en bas
 
Scroll Bar [Résolu]
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» [Résolu] Mot de passe smtp
» [Résolu] MSN vérolé
» [résolu]pc infecté par wwwzuc32.exe
» [Résolu] Photoshop CS2 : tampon
» [ résolu ]à propos de TFC

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