Connexion rapide:  

Forum: Greek Forum

Sujet Variable value σε variable name

Ce topic est ancien et peut contenir des informations obselètes ou incorrectes.

djachiPRO InfinityMember since 2005
Έστω ότι έχω το $myvar που παίρνει τιμές από 1 μέχρι 10 (τυχαίες).
Μπορώ την τιμή του $myvar να την χρησιμοποιώ στο όνομα ενός άλλου viariable? Π.χ $newvar_8 (όπου 8 η τιμή που έχει εκείνη τη στιγμή το $myvar)?

Ευχαριστώ
 

Posté Sat 20 Mar 21 @ 2:40 pm
Τι θέλεις να κάνεις;

Υπάρχουν κάποια "hack" αλλά πρέπει να είσαι πολύ προσεκτικός. Οπότε πες μας τι θες να κάνεις μήπως σου βρούμε κάποια πιο εύκολη λύση
 

Posté Sat 20 Mar 21 @ 3:23 pm
djachiPRO InfinityMember since 2005
Για ενα σκιν που παιδευω ειναι. Θελω στην ουσια να φτιαξω εναν διακοπτη που θα τον κανω toggle. Απλα επειδη δεν ξερω ποσες τιμες θα ειναι δε θελω να το πηγαινω με συνεχομενα ? ειναι 1? τοτε toggle το switch1 : ειναι 2? toggle το switch2

Θελω κατι πιο βατο του στυλ: το myvar είναι 7 τοτε toggle $switch`get_var '$myvar'` (που αυτο δεν δουλευει) και να κανει toggle το switch7
Χάθηκα με get_var, param_cast text κλπ κλπ... Κι απλα ρωταω αν υπαρχει κατι ευκολο

ΥΓ: Quarantine effect... Αν εχεις χρονο, αντι να ασχολεισαι με μουσικη, ασχολεισαι με προγαμματισμο
 

Posté Sat 20 Mar 21 @ 3:36 pm
Κάπου μπερδεύεσαι...
Είναι αδύνατο να ορίζεις μια μεταβλητή '$MainVar' και να πέρνει τιμές στην τύχη...
Εκτός κι αν η μεταβλητή '$MainVar' πέρνει τις τιμές τις από κάποιο action.
Αλλά και πάλι...
Είτε γράψεις var_equal '$MainVar' 1 ? this : var_equal '$MainVar' 2 ? that
είτε γράψεις var '$SecVarA' ? this : var '$SecVarB' ? that
είναι πάνω κάτω το ίδιο αποτέλεσμα...


Τώρα για να σου λύσω την απορία...
Μπορείς σε μία μεταβλητή να αποθηκεύσεις κείμενο:
set '$testvar' `get_text 'aaa'`
Μπορείς να αντιγράψεις το κείμενο από μια μεταβλητή σε μία άλλη:
set '$CopyOfTestVar' '$testvar'

Αλλά μέχρι εκεί.

Και πάλι πιστεύω οτι κάτι έχεις λάθος στη λογική σου για να θέλεις να ορίσεις "τυχαίες" μεταβλητές...

Αν δώσεις καλύτερο παράδειγμα από το τι θες να κάνεις ίσως υπάρχει λύση
 

Posté Sat 20 Mar 21 @ 6:52 pm
djachiPRO InfinityMember since 2005
Γιώργο,είπα τυχαίες γιατί δεν είναι από το 1 μέχρι το 10 στην σειρά. Μπορεί να είναι 8 μπορεί 3 κλπ. Οπως επίσης μπορεί να είναι από το 30 μέχρι το 45. Αυτό που ήθελα να κάνω είναι να φτιάξω μια μεταβλητή με δυναμικό όνομα ανάλογα την τιμή μιας άλλης μεταβλητής.

Αυτό δούλεψε

param_add `get_var '$myvar & param_cast 'text'` `get_text '$mynewvar'` & param_cast 'text' & toggle

Στον παραπάνω κώδικα, έστω ότι η myvar είναι 8, τότε η μεταβλητή $mynewvar8 γίνεται toggle
 

Posté Sun 21 Mar 21 @ 10:55 am
Και σε ξαναρωτάω:
Που θα χρησιμοποιήσεις την τυχαία μεταβλητή '$mynewvar8' που έκανες πριν toggle ?
Δεν πρέπει με κάποιο τρόπο να την χρησιμοποιήσεις κάπου;
Κι εκεί "κάπου" πως θα ξέρεις ποια "τυχαία" μεταβλητή όρισες;
 

Posté Sun 21 Mar 21 @ 7:25 pm
djachiPRO InfinityMember since 2005
Λάθος μου η χρήση της λέξης τυχαία. Γίνομαι συγκεκριμένος που χρησιμοποίησα τον κώδικα. Έχει να κάνει με αυτή την ερώτηση http://www.virtualdj.com/forums/240213/Greek_Forum/Button______skin.html

Εχω σχεδιάσει σε ένα σκιν 10 κουμπάκια (ο αριθμός μπορεί να αλλάξει).
Στον κοντρολερ εχω ενα endless knob που επιλέγει με cycle τιμες από 1 μέχρι 10. Κάνοντας push το knob, δίνω στην μεταβλητή την τρέχουσα τιμή πχ 8
Το button στο skin ανάβει (με τον τρόπο που είπαμε στο νήμα που έγραψα πριν). Γυρίζοντας το knob για καινούρια τιμή και πατόντας το, τότε ανάβει πχ το button 4 και σβήνει το 8.
Τελικά ήθελα να παραμένει και η παλιά τιμή ΟΝ (8) και η νέα (4). Και το 8 να έσβηνε όταν θα το επέλεγα πάλι από το knob.
Οπότε ήθελα το button του σκιν να τσεκάρει αν μια μεταβλητή που θα έπαιζε το ρολο του switch θα ηταν 1 ή 0. Και γι αυτο εψαχνα αυτό τον κώδικα.
Επειδή ήθελα να ψαχτώ με την vdj script δεν ήθελα να σας πω πληρως το προβλημα για να παιδευτω μονος μου. Και ίσως να πηγα μεσω Λαμίας τελικά.
Τελικός κώδικας

knob:
param_bigger 0 ? cycle $add 10 & param_add 95 "get_var '$add'" & set $var1 :
cycle $add -10 & param_add 95 "get_var '$add'" & set $var1 (το 95 είναι γιατί θέλω από αυτό το νούμερο να ξεκινάει η τιμή του var1

knob push:

set $othervar $var1 & param_add `get_var '$var1' & param_cast 'text'` `get_text '$led'` & param_cast 'text' & toggle (το othervar το χρησιμοποιω για αλλη δουλεια)

query σε ένα button του skin
var_equal '$var1' 97 ? blink : var_equal '$led97' 1 ? on (κανει blink οταν γίνεται scroll η τιμή ή μένει αναμένο όταν η δυναμική μεταβλητή που φτιάχτηκε είναι 1)

Ελπιζω να τα εγραψα κατανοητα. Φαντάζομαι οτι γίνεται και με αλλο τροπο
 

Posté Sun 21 Mar 21 @ 8:53 pm
Φυσικά και γίνεται με άλλο, πολύ πιο απλό τρόπο, και όντως πήγες μέσω Ξάνθης θα έλεγα, όχι Λαμίας.
Αλλά αν σε βολεύει έτσι... :)
 

Posté Sun 21 Mar 21 @ 9:17 pm
djachiPRO InfinityMember since 2005
ε μοιράσου τον με τον κόσμο σου! :-)

Επισης κάτι άσχετο με τον τίτλο του θέματος. Εχω πάρει όλα τα ποστς με τη σειρά γιατί κάπου θυμάμαι να είχες γράψει μια απάντηση για απενεργοποίηση τον action POIs
Υπάρχει κάτι τέτοιο ή ψάχνω στα χαμένα;
 

Posté Sun 21 Mar 21 @ 9:24 pm
Αυτό που έχω γράψει είναι οτι έχω προγραμματίσει ΕΓΩ τα action POIs ώστε να μπορώ να τα απενεργοποιώ.

Προσωπικά όλα μου τα action POIs είναι προγραμματισμένα ως εξής:
var_equal 'ExecMacro' 1 ? action


Έτσι αλλάζοντας (toggle) τη μεταβλιτή 'ExecMacro' μπορώ να ελέγχω αν θα κάνει κάτι ή όχι το action POI
 

Posté Sun 21 Mar 21 @ 9:51 pm
djachi wrote :
ε μοιράσου τον με τον κόσμο σου! :-)

Δεν είναι θέμα να μοιραστώ κάτι...
Επειδή στην πραγματικά ΔΕΝ έχεις τυχαίες μεταβλητές, η απλή λύση είναι και η καλύτερη:

Μεταβλητές:
$EncoderScrollPos
$ScrollPos1
$ScrollPos2
$ScrollPos3
...
$ScrollPos10

Κώδικες:
Scroll:
param_bigger 0 ? cycle '$EncoderScrollPos' 10 & param_add 95 : cycle '$EncoderScrollPos' -10 & param_add 95

Push:
var_equal '$EncoderScrollPos' 95 ? toggle '$ScrollPos1' : var_equal '$EncoderScrollPos' 96 ? toggle '$ScrollPos2' : ...

Query:
var_equal '$EncoderScrollPos' 95 ? blink : get_var '$ScrollPos1'

Η κύρια διαφορά είναι στο push.
Μπορεί ο κώδικας σου να έχει λιγότερες γραμμές, αλλά προγραμματιστικά είναι πιο αργός λόγω των εντολών που χρησιμοποιείς. Το var_equal myvar 1 ? this : var_equal myvar 2 ? that : ... είναι προγραμματιστικά πολύ πιο γρήγορο να εκτελεσθεί και τρώει και λιγότερη μνήμη.
Φυσικά δεν είναι δραματική η διαφορά για ένα και μόνο κουμπί, οπότε δεν υπάρχει λόγος να το αλλάξεις.
Αλλά η "απλή" λύση (που ήταν φανερή εξαρχής) ήταν τελικά και η πιο σωστή.
Επίσης, αν κάποια στιγμή μετά από 2-3 χρόνια κοιτάξεις τον κώδικα, θα σου είναι πολύ πιο εύκολο να θυμηθείς τι έκανες και γιατί. Πίστεψε με, έχω γράψει κάποια πολύπλοκα script που όταν τα κανακοίταξα ένα χρόνο μετά έσπαγα το κεφάλι μου να θυμηθώ και να κατάλαβω τι έκανα... :P

Τέλος υπάρχει και το εξής:
Αν αύριο θελήσεις με το push να εκτελέσεις ταυτόχρονα και κάποιο πολύπλοκο action μαζί με το toggle κάθε μεταβλητής, καλή τύχη στο να πετύχεις σωστά όλα τα cast και όλες τις μεταβλητές.
Ενώ με τον απλό κώδικα σε απασχολεί μόνο η εντολή που θες να δώσεις και στο σωστό σημείο που θα την δώσεις.

 

Posté Sun 21 Mar 21 @ 10:09 pm
djachiPRO InfinityMember since 2005
PhantomDeejay wrote :

Αλλά η "απλή" λύση (που ήταν φανερή εξαρχής) ήταν τελικά και η πιο σωστή.


Αυτό είχα κάνει από την αρχή, απλά επειδή άλλαξα 2-3 φορές το νούμερο εκκίνησης και τα αλλαζα ενα-ενα, αναρωτήθηκα αν μπορεί να περάσει σε μεταβλητή το όνομα. Χρόνο έχουμε έτσι κι αλλιώς.

PhantomDeejay wrote :

Αλλά η "απλή" λύση (που ήταν φανερή εξαρχής) ήταν τελικά και η πιο σωστή.
Επίσης, αν κάποια στιγμή μετά από 2-3 χρόνια κοιτάξεις τον κώδικα, θα σου είναι πολύ πιο εύκολο να θυμηθείς τι έκανες και γιατί. Πίστεψε με, έχω γράψει κάποια πολύπλοκα script που όταν τα κανακοίταξα ένα χρόνο μετά έσπαγα το κεφάλι μου να θυμηθώ και να κατάλαβω τι έκανα... :P



Κι επίσης εδώ έρχεται και κουμπώνει το άλλο ερώτημα που είχα θέσει αν μπορούμε να γράψουμε comments μέσα σε scripts (για να θυμόμαστε τι κάνει τι)

Σ ευχαριστώ για άλλη μια φορά για τη βοήθειά σου
 

Posté Sun 21 Mar 21 @ 11:31 pm
Μιλάμε πάντα για DJ software. Ας μην το ξεχνάμε αυτό! Οπότε όχι, δύσκολα θα προστεθούν περισσότερα εργαλεία προγραμματισμού σε ένα DJ software όταν το 80% των χρηστών δεν ξέρει να γράψει ούτε ένα απλό script τύπου "deck 1 stop & deck 2 play"
 

Posté Mon 22 Mar 21 @ 7:53 am
djachiPRO InfinityMember since 2005
PhantomDeejay wrote :

Scroll:
param_bigger 0 ? cycle '$EncoderScrollPos' 10 & param_add 95 : cycle '$EncoderScrollPos' -10 & param_add 95



Γιώργο αυτό δεν δούλεψε. Οι τιμές του $ EncoderScrollPos ήταν οι τιμές του cycle.
 

Posté Mon 22 Mar 21 @ 9:32 am
djachiPRO InfinityMember since 2005
PhantomDeejay wrote :

Προσωπικά όλα μου τα action POIs είναι προγραμματισμένα ως εξής:
var_equal 'ExecMacro' 1 ? action


Έτσι αλλάζοντας (toggle) τη μεταβλιτή 'ExecMacro' μπορώ να ελέγχω αν θα κάνει κάτι ή όχι το action POI


Αυτό μου εδωσε μια άλλη ιδέα. Προσπαθώ να προγραμματίσω έναν controller για να χρησιμοποιώ το freestyler. Με μια μεταβλητή λοιπόν θα μπορούσα να χρησιμοποιώ τον controller για parties (με submasters, override buttons κλπ) ή για αλλες περιπτωσεις (live πχ) ως dmx controller (ελεγχος fixtures)

edit: Το ένα φέρνει το άλλο... Υπάρχει εντολή να φορτώνει συγκεκριμένο αποθηκευμένο mapper?
 

Posté Tue 23 Mar 21 @ 8:27 am
Ναι, αν και σε αυτή την περίπτωση θα ήταν ευκολότερο να φτιάξεις δύο mappers και να φορτώνεις τον κατάλληλο κάθε φορά.
Μπορείς να φορτώσεις mapper και μέσω VDJ Script

Έτσι οι δύο mapper θα είναι πιο "καθαροί" και λιγότερο πολύπλοκοι...

Αυτό με τους mappers το έχω κάνει κι εγώ, αλλά για άλλο λόγο:
Έχω φτιάξει ένα mapper που παίζω κανονικά, και ένα mapper που όλα τα βασικά κουμπιά του controller δεν κάνουν τίποτα.
Έτσι με το πάτημα ενός κουμπιού μπορώ να "κλειδώσω" τον controller όταν χρειάζεται.
 

Posté Tue 23 Mar 21 @ 8:51 am
controller_mapping 'DDJ-800' 'Live'
controller_mapping 'DDJ-800' 'Lock'
controller_mapping 'DDJ-800' 'Preparation'
 

Posté Tue 23 Mar 21 @ 9:05 am


(Les anciens sujets et forums sont automatiquement fermés)