Director: viewer di immagini

Ciao a tutti!

Spero non sia un problema se vi sottopongo un po' di codice che vorrei ottimizzare. :)

Ho creato un .dir che funge da visualizzatore di immagini; sfrutta le funzioni interne del director per importare i file grafici (tutte jpeg) in modo automatico e quindi è piuttosto funzionale... però vorrei fare di meglio...

Mi spiego: all'interno della cartella delle immagini da scorrere vi sono a loro volta altre directory (le immagini sono divise per argomento). Per passare da una directory all'altra ho creato una pulsantiera con un bottone per ogni cartella da "raggiungere" e associo ad ogni pulsante questo comportamento


on mouseup me

global sorgente, actual_index, subdir, subdir_counter
global dimensione_max, larghezza_max, posizione
global current_gallery
global idfolder
global immagine

ref = sprite(me.spritenum).member

if sorgente = ref.name then exit

current_gallery = [ ]

sorgente = ref.name
actual_index = subdir_counter[subdir.getPos(sorgente)]

repeat with cont = 1 to 1000
nomefile = getNthFileNameInFolder("@/" & idfolder & "/" & sorgente, cont)
if nomefile = EMPTY then exit repeat
current_gallery.append(nomefile)

end repeat

member(immagine).erase()
immagine = new(#bitmap)

-- ordinamento della lista corrente
current_gallery.sort()

member(immagine).filename = "@/" & idfolder & "/" & sorgente & "/" & current_gallery[actual_index]

sprite(2).member = member(immagine)
updateStage

end mouseup


In poche parole: lo script quando si clicca su uno dei pulsanti va a pescare la sottodirectory con il nome dell'elemento del cast sulla cui istanza sullo stage sono andato a cliccare e aggiorna un po' di puntatori globali (che vado ad usare nei testi "immagine precedente" e "immagine successiva".

Funziona, ma e' una rottura perche':

1. quel loop che va da 1 a 1000 è proprio una schifezza sotto forma di codice, ma non ho trovato un altro sistema per leggere i nomi file in una data cartella e porli in una lista

2. devo creare la pulsantiera manualmente ogni volta e poichè le cartelle con le immagini sono TANTE è una vera rottura. I pulsanti nn sono altro che delle semplici text labels con il nome della cartella in questione quindi nn necessitano del mio intervento "grafico". L'ideale sarebbe un sistema per creare automaticamente i cast members, porli sullo stage e applicarvi il comportamento che ho incollato sopra... non sono riuscito a trovare un sistema per farlo...

Chiedo scusa per la lunghezza del messaggio, spero che a qualche anima pia venga su qualche idea! :) grazie in anticipo!

 TheClue, N.D.

mi "autorispondo" per comunicare a pablito che sono riuscito nell'intento, se qualcuno è interessato alla soluzione e pensa che possa essergli utile mi faccia sapere che posto un po' di codice ;)

 TheClue, N.D.

Certo! Non occorrono permessi per pubblicare codici e soluzioni. ;-]

 Pablito, N.D.

detto fatto!

supponiamo di avere una lista "subdir" contenente i nomi delle sottodirectory, aggiungiamo questo po' di codice su di uno script on startmovie


set startMember = the number of members

repeat with x = 1 to count(subdir)
cur = new(#field, member(x + startMember))
cur.name = subdir[x]
cur.text = subdir[x]
cur.font = "Arial"
cur.fontSize = 12
cur.alignment = "right"
cur.textStyle = "bold"
cur.color = color(#rgb,20,20,20)

channel(x + occupied_sprite).makeScriptedSprite(cur)
sprite(x + occupied_sprite).ink = 36
sprite(x + occupied_sprite).locH = 425 - sprite(x + occupied_sprite).width
sprite(x + occupied_sprite).locV = 10 + (x * (sprite(x + occupied_sprite).height + 10))

scambia = script("switch_gallery").new()
sprite(x + occupied_sprite).scriptInstanceList.add(scambia)

end repeat

lastMember = cur.membernum


il comportamento "switch_gallery" che associo dinamicamente agli sprite cambia la "sorgente" delle immagini


ref = sprite(me.spritenum).member

if sorgente = ref.name then exit

current_gallery = [ ]

sorgente = ref.name
actual_index = subdir_counter[subdir.getPos(sorgente)]

-- lista dei file nella dir specificata
repeat with cont = 1 to 1000
nomefile = getNthFileNameInFolder("@/" & idfolder & "/" & sorgente, cont)
if nomefile = EMPTY then exit repeat
current_gallery.append(nomefile)

end repeat

member(immagine).erase()
immagine = new(#bitmap)

-- ordinamento della lista corrente
current_gallery.sort()

member(immagine).filename = "@/" & idfolder & "/" & sorgente & "/" & current_gallery[actual_index]


infine abbiamo bisogno di un minimo di cleanup in uscita:


on stopmovie me

global immagine
global startMember, lastMember, occupied_sprite
member(immagine).erase()

repeat with x = 1 to (lastMember - startMember)
channel(x + occupied_sprite).removeScriptedSprite()
member(x + startMember).erase()
end repeat

end


ecco fatto :)


 TheClue, N.D.
001design.it ® è un marchio registrato.
© 2004-2017 Molfese Paolo - P.Iva: 03430820617 - All rights reserved | Tutti i diritti sono riservati.