OVH Cloud OVH Cloud

[Director] afficher une liste de résultats dynamique

10 réponses
Avatar
KRS
Bonjour,

J'aimerais votre avis sur comment organiser mon travail avant de me lancer.
Je veux afficher une liste de résultat, issue d'une recherche de
l'utilisateur, sous la formes de lignes contenant chacunes: une image en
miniature, une titre, une description. (un peu comme dans un
explorateur de fichiers)
Les données viennent d'un fichier xml et celà fonctionne déjà, je peux
manipuler à souhait les données dans des listes.
Suivant le résultat de la recherche il peut s'afficher de 0 à plus d'une
centaine de lignes, ce qui implique l'apparition d'une scrollbar si besoin.
Ensuite en cliquant sur une ligne, on est redirigé sur une page
présentant le sujet en détail.


Avec Flash j'aurais dupliqué un movie clip représentant une image et 2
champs texte que je changerais dynamiqument.
Mais comment concevoir celà avec Director?

Merci de vos conseils

10 réponses

Avatar
Ned
perso je le ferai avec du Flash embarqué dans une appli Dir...
Comme tu le fais remarquer Flash est plus simple pour ce genre de trucs.
Non pas que ce soit infaisable, mais de manière tellement plus lourde (à
moins d'avoir, comme Bubar, pondu un système complet d'API en lingo)

Sinon tu peux étudier plusieurs pistes :
- les boucles d'animations, avec des "tell" pour changer leur sprite image
- des scripts parents qui instancient à la volée les sprites nécessaires....

hth

--
------------------
Ned
----------------------------------------
Bien faire et laisser braire...
... mais après avoir lu & compris ceci :
http://faqmm.free.fr
----------------------------------------
Avatar
KRS
Merci pour ta réponse, en effet du flash embarqué serait plus simple
pour moi, j'éspère que ça sera potable coté performances.

Sinon, il y aurai-t-il des Xtra spécialisé pour celà?

Ned wrote:
perso je le ferai avec du Flash embarqué dans une appli Dir...
Comme tu le fais remarquer Flash est plus simple pour ce genre de trucs.
Non pas que ce soit infaisable, mais de manière tellement plus lourde (à
moins d'avoir, comme Bubar, pondu un système complet d'API en lingo)

Sinon tu peux étudier plusieurs pistes :
- les boucles d'animations, avec des "tell" pour changer leur sprite image
- des scripts parents qui instancient à la volée les sprites
nécessaires....

hth



Avatar
Ned
le 11/08/2005 10:50:
Merci pour ta réponse, en effet du flash embarqué serait plus simple
pour moi, j'éspère que ça sera potable coté performances.



avec le couple Dir MX2004 et Flash MX je n'ai pas trop de soucis de
performances. Mais je n'ai pas eu de projet particulièrement gourmand
non plus...

Sinon, il y aurai-t-il des Xtra spécialisé pour celà?



aucune idée.... fouille sur www.mediamacros.com ou www.xtrasy.com.
Le problème étant dans ce cas de formuler ce que tu recherches ;o)
la section "data viewer" sur xtrasy semble donner des résultats, mais je
ne peux pas te dire quel xtra vaut le coup ou non : j'en ai jamais
utilisé de ce genre.

--
------------------
Ned
----------------------------------------
Bien faire et laisser braire...
... mais après avoir lu & compris ceci :
http://faqmm.free.fr
----------------------------------------
Avatar
Bubar
Ned wrote:
perso je le ferai avec du Flash embarqué dans une appli Dir...
Comme tu le fais remarquer Flash est plus simple pour ce genre de
trucs. Non pas que ce soit infaisable, mais de manière tellement plus
lourde (à moins d'avoir, comme Bubar, pondu un système complet d'API
en lingo)
Sinon tu peux étudier plusieurs pistes :
- les boucles d'animations, avec des "tell" pour changer leur sprite
image - des scripts parents qui instancient à la volée les sprites
nécessaires


Ben on voit que tu touches plus à Director. Ce genre de chose se fait
simplement sans avoir à se compliquer la vie. Plutôt que de penser à
afficher X produits en même temps, même s'ils ne sont pas visible, il faut
penser : combien est-ce que je peux afficher de produits à l'écran ? Ensuite
changer à la volée le membre des sprites pour les images et le texte
accompagnant

Ex : Si on peut mettre 4 lignes à la fois

sp1(image) spr2(texte) spr3(texte)
sp4(image) spr5(texte) spr3(texte)
sp7(image) spr8(texte) spr9(texte)
sp10(image) spr11(texte) spr12(texte)

Si on descend d'une ligne :
repeat with i=1 to 3
sprite((i-1)*3+1).member=sprite(i*3+1).member
sprite((i-1)*3+2).member.text=sprite(i*3+2).member.text
sprite((i-1)*3+3).member.text=sprite(i*3+3).member.text
end repeat

Ca provoque un décalage vers le haut
Il suffit en suite de remplir la 4eme ligne avec les nouvelles valeurs
Il faut juste se méfier si les images n'ont pas toutes la même taille, qu'il
faudra peut être repositionner les sprites (position du centre et
largeur/hauteur)

Une méthode plus rapide encore est de zapper non pas le contenu du sprite,
mais le sprite lui même. C'est à la fois plus rapide (pas de remplissage
mémoire dans tous les sens) et plus clean (les textes risquent de flasher un
peu).

on déclare bein avant la position qu'auront les éléments (centre pour les
bitmap, coin haut/gauche pour les textes) dans 3 listes (une par éléement).
Si tu es sur de toi, et que les éléments sont bien organisés, il doit être
possible de trouver les positions par algo.
Si tu préfères poser les sprites plutôt que les manipuler dynamiquement,
l'algo va changer un peu mais pas de grand chose

On a aussi besoin d'une variable pour savoir qui est le premier sprite à
apparaitre en haut de la liste
global gfirstspr
global glpos

initialisation de gfirstspr
gfirstspr=0 --ici c'est le sprite 1 qui contiendra la première image visible
en haut de la liste. Les 2 textes correspondant seront les 2 sprites
suivants
gnbelem=4 --quatre lignes de données sont visible en même temps

glpos est une liste de liste donnant les coordonnées
glpos=[ [point(0,0),point(100,0),point(200,0)], ....]

on upone
gfirstspr=(gfirstspr+1) mod gnbelem
aff()
end

on downone
gfirstspr=(gfirstspr-1)
if gfirstspr<0 then
gfirstspr=gnbelem-1 --gnbelem lignes affichées - 1
end if
aff()
end

on aff
repeat with i=0 to gnbelem-2
repeat with j=1 to 3
numspr=(((i+gfirstspr)*3) mod (gnbelem*3))+j
sprite(numspr).loc=glpos[i+1][j]
end repeat
end repeat
--ici remplir les 3 sprites avec les valeurs suivantes
numspr=(((gnbelem-1+gfirstspr)*3) mod (gnbelem*3))+1
sprite(numspr).loc=glpos[gnbelem][1]
sprite(numspr).member=member(image correspondant à la nouvelle valeur)
sprite(numspr+1).loc=glpos[gnbelem][2]
sprite(numspr+1).member.text="texte correspondant"
sprite(numspr+2).loc=glpos[gnbelem][3]
sprite(numspr+2).member.text="texte correspondant"
end

Pour "monter", appeler upone(). Pour "descendre", appeler downone()

un petit exemple ici : http://www.wapitistudio.com/pub/test_decal.rar

--
Bubar
Freelance Multimédia - internet
Création de logiciels multimédia et sites web
http://www.wapitistudio.com
Avatar
Ned
> Ben on voit que tu touches plus à Director. ...



Argh ! touché !!!!!
(c'est bien pour ça que je me débrouille pour que tu touches à ma
place... ose t'en plaindre ! ;o)



--
------------------
Ned
----------------------------------------
Bien faire et laisser braire...
... mais après avoir lu & compris ceci :
http://faqmm.free.fr
----------------------------------------
Avatar
Bubar
Ned wrote:
> Ben on voit que tu touches plus à Director. ...

Argh ! touché !!!!!
(c'est bien pour ça que je me débrouille pour que tu touches à ma
place... ose t'en plaindre ! ;o)


Point du tout ! Mais à force de vanter flash, tu vas me forcer à m'y mettre
!

PS : Tu es toujours là ? j'ai pas répondu à ton mail, vu que tu devais
partir.

--
Bubar
Freelance Multimédia - internet
Création de logiciels multimédia et sites web
http://www.wapitistudio.com
Avatar
Ned
>
Point du tout ! Mais à force de vanter flash, tu vas me forcer à m'y mettre
!



héhéhé ! un peu que tu vas t'y mettre ! te connaissant, quand tu auras
commencer à bidouiller sur le mix Flash + Dir tu chercheras à te faire
cloner en 20 exemplaires histoire de pouvoir explorer toutes les pistes
qui s'offrent à toi ;o))


PS : Tu es toujours là ? j'ai pas répondu à ton mail, vu que tu devais
partir.




je pars demain... désolé de pas avoir été plus clair hier :o))

--
------------------
Ned
----------------------------------------
Bien faire et laisser braire...
... mais après avoir lu & compris ceci :
http://faqmm.free.fr
----------------------------------------
Avatar
KRS
Merci infiniment pour la démonstration, c'est clair et l'approche me
semble simple ainsi. Je pense que ton éclairage m'as beaucoup apporté
sur la façon de concevoir mon projet Director.

Allez, je met en pratique maintenant!

Bubar wrote:
Ned wrote:

perso je le ferai avec du Flash embarqué dans une appli Dir...
Comme tu le fais remarquer Flash est plus simple pour ce genre de
trucs. Non pas que ce soit infaisable, mais de manière tellement plus
lourde (à moins d'avoir, comme Bubar, pondu un système complet d'API
en lingo)
Sinon tu peux étudier plusieurs pistes :
- les boucles d'animations, avec des "tell" pour changer leur sprite
image - des scripts parents qui instancient à la volée les sprites
nécessaires



Ben on voit que tu touches plus à Director. Ce genre de chose se fait
simplement sans avoir à se compliquer la vie. Plutôt que de penser à
afficher X produits en même temps, même s'ils ne sont pas visible, il faut
penser : combien est-ce que je peux afficher de produits à l'écran ? Ensuite
changer à la volée le membre des sprites pour les images et le texte
accompagnant

Ex : Si on peut mettre 4 lignes à la fois

sp1(image) spr2(texte) spr3(texte)
sp4(image) spr5(texte) spr3(texte)
sp7(image) spr8(texte) spr9(texte)
sp10(image) spr11(texte) spr12(texte)

Si on descend d'une ligne :
repeat with i=1 to 3
sprite((i-1)*3+1).member=sprite(i*3+1).member
sprite((i-1)*3+2).member.text=sprite(i*3+2).member.text
sprite((i-1)*3+3).member.text=sprite(i*3+3).member.text
end repeat

Ca provoque un décalage vers le haut
Il suffit en suite de remplir la 4eme ligne avec les nouvelles valeurs
Il faut juste se méfier si les images n'ont pas toutes la même taille, qu'il
faudra peut être repositionner les sprites (position du centre et
largeur/hauteur)

Une méthode plus rapide encore est de zapper non pas le contenu du sprite,
mais le sprite lui même. C'est à la fois plus rapide (pas de remplissage
mémoire dans tous les sens) et plus clean (les textes risquent de flasher un
peu).

on déclare bein avant la position qu'auront les éléments (centre pour les
bitmap, coin haut/gauche pour les textes) dans 3 listes (une par éléement).
Si tu es sur de toi, et que les éléments sont bien organisés, il doit être
possible de trouver les positions par algo.
Si tu préfères poser les sprites plutôt que les manipuler dynamiquement,
l'algo va changer un peu mais pas de grand chose

On a aussi besoin d'une variable pour savoir qui est le premier sprite à
apparaitre en haut de la liste
global gfirstspr
global glpos

initialisation de gfirstspr
gfirstspr=0 --ici c'est le sprite 1 qui contiendra la première image visible
en haut de la liste. Les 2 textes correspondant seront les 2 sprites
suivants
gnbelem=4 --quatre lignes de données sont visible en même temps

glpos est une liste de liste donnant les coordonnées
glpos=[ [point(0,0),point(100,0),point(200,0)], ....]

on upone
gfirstspr=(gfirstspr+1) mod gnbelem
aff()
end

on downone
gfirstspr=(gfirstspr-1)
if gfirstspr<0 then
gfirstspr=gnbelem-1 --gnbelem lignes affichées - 1
end if
aff()
end

on aff
repeat with i=0 to gnbelem-2
repeat with j=1 to 3
numspr=(((i+gfirstspr)*3) mod (gnbelem*3))+j
sprite(numspr).loc=glpos[i+1][j]
end repeat
end repeat
--ici remplir les 3 sprites avec les valeurs suivantes
numspr=(((gnbelem-1+gfirstspr)*3) mod (gnbelem*3))+1
sprite(numspr).loc=glpos[gnbelem][1]
sprite(numspr).member=member(image correspondant à la nouvelle valeur)
sprite(numspr+1).loc=glpos[gnbelem][2]
sprite(numspr+1).member.text="texte correspondant"
sprite(numspr+2).loc=glpos[gnbelem][3]
sprite(numspr+2).member.text="texte correspondant"
end

Pour "monter", appeler upone(). Pour "descendre", appeler downone()

un petit exemple ici : http://www.wapitistudio.com/pub/test_decal.rar



Avatar
KRS
En prenant ton exemple pour réfrence, si je me retrouve dans le cas ou
je dois afficher moins de 4 images, quelle est la meilleure méthode pour
se débarasser des lignes en trop?

peut-on détruire un sprite? Faut-il le placer hors de la scène, le
rendre trasparent et rendre un éventuel comportement bouton inactif ?

Merci d'avance
Avatar
Bubar
KRS wrote:
En prenant ton exemple pour réfrence, si je me retrouve dans le cas ou
je dois afficher moins de 4 images, quelle est la meilleure méthode
pour se débarasser des lignes en trop?

peut-on détruire un sprite? Faut-il le placer hors de la scène, le
rendre trasparent et rendre un éventuel comportement bouton inactif ?

Merci d'avance


Avec mon exemple, comme tu stockes les coordonnées dans une liste, tu peux
facilement faire disparaitre le sprite en le mettant hors écran, genre
point(-10000,-10000)
Tu peux également le rendre invisible, mais je préfère la première solution,
le sprite n'étant plus physiquement sur l'écran.

Mais il faut voir ton appli en elle-même. Est-ce qu'il n'est pas mieux
visuellement de mettre une "non-image" à la place (ie "pas d'image") ?
Mettre un cache par dessus ? Tout dépend de ton interface

Sinon on ne peut pas détruire un sprite, tu peux juste modifier le membre
attaché.
Pour le(s) comportement(s) attaché(s), ça dépend également. Si il n'y a que
des réactions à la souris, comme il n'est plus à l'écran, ça ne risque rien.
Par contre et par exemple, si tu envoies un message à tous les sprites
(sendAllSprites), celui-ci va aussi réagir, ce qui peut être un
inconvénient.
Par sécurité, tu peux mettre une fonction pour activer/désactiver le
comportement que tu appelles avant de l'envoyer en dehors de l'écran.

--
Bubar
Freelance Multimédia - internet
Création de logiciels multimédia et sites web
http://www.wapitistudio.com