Autorun

 

Optimisation mémoire

 

Integration Xtras

 

Creer sa glissière de volume

   

Bonjour à tous,


Nous allons étudier ensemble aujourd'hui comment créer notre propre glissière de volume. Le code qui va être mis en avant ici pourra tout autant être utiliser pour devenir une glissiere de navigation vidéo.

Pour faire une glissiere vous pouvez procéder comme suit :

Tout d'abord, créer la glissière :

Sur votre bouton de curseur, nous allons placer un code du type :

________________________________________________________

global gDepl

on beginSprite me
sprite(me.spritenum).constraint =2
end

on mouseDown me
gDepl = 1
end

on mouseUp me
gDepl = 0
end

on mouseUpOutside me
gDepl = 0
end

_________________________________________________________

La variable gDepl va permettre d'orchestrer le déplacement et aussi lancer l'execution d'un gestionnaire que nous allons créé dans un movieScript.
mouseUpOutside --> Permet de réinitialiser la variable si le relâchement de souris se fait en dehors de votre bouton.

En script de frame, vous mettez le script suivant, nous considérons que votre acteur "curseur" se trouve sur le sprite 3 :

_________________________________________________________

global gDepl

on exitFrame me

if gDepl = 1 then
sprite(3).locH = the mouseH
movieSouris()
end if

go to the frame
end

__________________________________________________________

Ainsi, si la variable est égale à 1, le curseur de glissiere prend les coordonnées de la souris en x (soit h en Director).
Mais pour l'instant nous n'avons pas contraint son mouvement. Concrètement, si nous allons à l'exterieur de la scène avec la souris, le curseur va le suivre gentimment :P (reviens, mais... Reviens tout de suite !!!) ;)

Il va falloir paramétrer la contrainte. Pour cela,nous appelons le gestionnaire MovieSouris() qui se trouve dans un MovieScript ou script d'animation. :)

Le script MovieSouris...

_____________________________________________________

on movieSouris()
lRectConstraint = sprite(2).rect
lWidth = member("barre").width

lCoor = sprite(3).locH
lCurseurCoor = lCoor-sprite(2).rect[1]
lGrad = lCurseurCoor *255 /lwidth
lVol = lGrad
sound(2).volume = lVol
end

______________________________________________________

Tout d'abord nous devons contraindre notre curseur. Pour cela, nous allons utiliser un acteur qui représente la marge de manoeuvre dudit curseur ;).
On va le représenter par une "barre".

lRectConstraint = sprite(2).rect --> Cette local que nous créons récupère les coordonnées de notre acteur "barre" qui se trouve sur le sprite 2 (je vous laisse regarder dans l'aide les tenants et aboutissants de rect ;) )

lWidth = member("barre").width --> Nous récupérons ici la largeur de notre acteur, c'est à dire la surface sur laquelle notre curseur pourra bouger.

lCoor = sprite(3).locH--> Si l'on considère que notre curseur de glissiere se trouve sur la sprite 3 par exemple, ici , lCoor récupère la loc en H de notre bouton curseur.

Un probleme va se poser... Comment savoir ou se trouve en terme de coordonnées notre bouton curseur par rapport à notre barre afin de pouvoir faire un calcul pour établir le volume de son ???
Et oui ! La barre et le curseur peuvent se trouver n'importe ou sur la scène. Or pour établir nos calculs, il nous faut une base. C'est à dire un point sur lequel se ralier. La base, ce sera le 0 en coordonnées afin que tous nos acteurs utilisent la même base de coordonnées et donc de calcul.

lCurseurCoor = lCoor-sprite(2).rect[1] --> Ici nous prenons les coordonnées en H du curseur grace à notre variable lCurseurCoor et nous soustrayons la premiere valeur de notre rect. C'est à dire la coordonnée en H du coin gauche de notre acteur "barre".

Ca veut dire quoi ?
Si votre acteur "barre" se trouve à 68 pixels du bord gauche de votre scène, on soustraiera cette valeur à la localisation de notre curseur. Pourquoi ?
Si le point de repère "0" de notre barre est le bord gauche de la scène, celui de notre curseur, par contre, est celui de notre barre : soit à 68 pixels du bord. Pour les calculs qui vont suivre, nous ne fonctionnons donc pas sur la même échelle. il faut remttre les deux acteurs au même repère. Le bord gauche (et oui, lui il change jamais :P)

Maintenant, nous poouvons mettre en place le calcul du volume.

_________________________________________________________


lGrad = lCurseurCoor *255 /lwidth
lVol = lGrad
sound(2).volume = lVol

_________________________________________________________


On multiplie lCurseurCoor par 255 (nombre de graduation pour la commande volume en Director)et on le divise par la largeur de notre barre. Ainsi, le code peut faire la conversion en volume de la distance du curseur sur la barre par rapport au bord gauche.

Ensuite lVol prend la valeur précédente et nous assignons enfin lVol au volume de notre piste.

Et le tour est joué. :P

 

Maintenant, nous pourrions très bien imaginer ce principe de glissière pour créer une barre de navigation dans une vidéo. Le principe restera le même à ceci près que nous jouerons sur le movieTime.

Bonne soirée

  Contact : Steve Louis